Мы используем трассировку стека в проприетарном assert
, например, макросе, чтобы отлавливать ошибки разработчика - при обнаружении ошибки трассировка стека печатается.
Я считаю, что gcc-пары backtrace()
/backtrace_symbols()
недостаточно:
- Имена искажены
- Нет информации о строке
Первая проблема может быть решена с помощью abi :: __ cxa_demangle.
Однако вторая проблема более сложная. Я нашел замену для backtrace_symbols(). Это лучше, чем gcc backtrace_symbols(), поскольку он может извлекать номера строк (если они скомпилированы с -g), и вам не нужно компилировать с -rdynamic.
Однако, этот код лицензирован по GNU, поэтому я не могу использовать его в коммерческом коде.
Любое предложение?
P.S.
GDB способен распечатывать аргументы, передаваемые функциям. Наверное, это уже слишком много, чтобы просить :)
PS 2
Подобный вопрос (спасибо, nobar)