В моем коде у меня есть некоторый макрос assert во время выполнения (назовем его runtime_assert).Это должно быть в многопоточном приложении.
Когда переданное условие оценивается как ложное, runtime_assert завершает программу, выгружая трассировку стека с последующим вызовом _exit ().
Как вы, вероятно, знаете, выгрузка трассировки стекане является тривиальной задачей ( Как получить трассировку стека для C ++, используя gcc с информацией о номере строки? ).
Идея состоит в том, чтобы вызвать gdb с pid процесса, вызвав system ().
- Это хорошая идея в целом?Или лучше использовать только инструменты процесса, чтобы получить обратную трассировку?(например, gcc
backtrace () / backtrace_symbols ()) - Когда вызывается ptrace (), это как-то повлияет на другие потоки?
- Если в системе не хватает ресурсов (например, памяти /места на диске) может ли ошибка gdb fork?
- Как распечатать трассировку стека только текущего потока?(Я могу получить адрес текущего метода из gcc backtrace ())