我一直在使用 backtrace 和 backtrace_symbols 来生成程序堆栈跟踪,以用于日志记录/诊断。它似乎大致工作,但是,我得到了一点修饰,并且没有与每个函数调用相关联的随附文件/行号(正如我在 gdb bt 调用或其他东西中所期望的那样)。这是一个例子:
1 leonardo 0x00006989 _ZN9ExceptionC2E13ExceptionType + 111
2 leonardo 0x00006a20 _ZN9ExceptionC1E13ExceptionType + 24
3 leonardo 0x0000ab64 _ZN5Rules11ApplyActionER16ApplicableActionR9GameState + 1060
4 leonardo 0x0000ed15 _ZN9Simulator8SimulateEv + 2179
5 leonardo 0x0000eec9 _ZN9Simulator8SimulateEi + 37
6 leonardo 0x00009729 main + 45
7 leonardo 0x000025c6 start + 54
任何我遗漏的东西,做一些愚蠢的事情,或者这就是我在 OS/X 上的回溯中所能期望的?
其他一些花絮:
rdynamic
我正在使用的 g++ 版本(4.0.1)的链接选项。-g/-g3
没有任何区别。
abi::__cxa__demangle
似乎什么也没做