Как получить трассировку стека для C ++ с помощью gcc с информацией о номере строки?

Мы используем трассировку стека в проприетарном assert как макрос для обнаружения ошибок разработчика - при обнаружении ошибки печатается трассировка стека.

Я нахожу пару gcc backtrace () / backtrace_symbols () методов недостаточно:

  1. Имена искажены
  2. Нет информации о строке

1-я проблема может быть решена с помощью abi :: __ cxa_demangle .

Однако 2-я проблема жестче. Я нашел замену backtrace_symbols () .

Однако 2-я проблема сложнее. Я нашел замену backtrace_symbols () .

Однако 2-я проблема сложнее. Я нашел замену backtrace_symbols () . Это лучше, чем gcc backtrace_symbols (), так как он может извлекать номера строк (если скомпилирован с -g), и вам не нужно компилировать с -rdynamic.

Hoverer код лицензирован GNU, поэтому IMHO я не могу использовать его в коммерческом коде.

Любое предложение?

PS

GDB может распечатывать аргументы, передаваемые функциям. Наверное, это уже слишком:)

PS 2

Аналогичный вопрос (спасибо nobar)

57
задан Community 23 May 2017 в 12:34
поделиться