【发布时间】:2011-08-22 04:37:40
【问题描述】:
当我的 C++ 程序终止时,我正在尝试打印回溯。函数打印回溯如下;
void print_backtrace(void){
void *tracePtrs[10];
size_t count;
count = backtrace(tracePtrs, 10);
char** funcNames = backtrace_symbols(tracePtrs, count);
for (int i = 0; i < count; i++)
syslog(LOG_INFO,"%s\n", funcNames[i]);
free(funcNames);
}
它给出的输出类似于 ;
desktop program: Received SIGSEGV signal, last error is : Success
desktop program: ./program() [0x422225]
desktop program: ./program() [0x422371]
desktop program: /lib/libc.so.6(+0x33af0) [0x7f0710f75af0]
desktop program: /lib/libc.so.6(+0x12a08e) [0x7f071106c08e]
desktop program: ./program() [0x428895]
desktop program: /lib/libc.so.6(__libc_start_main+0xfd) [0x7f0710f60c4d]
desktop program: ./program() [0x4082c9]
有没有办法通过函数名称和行获得更详细的回溯,例如 gdb 输出?
【问题讨论】:
-
你安装了调试libc吗?如果您将命令行上的 -g 传递给 GCC,IIRC Linux 将为此使用带有调试符号的 libc。
-
为什么不使用gdb,请问? Backtraces section of the GNU libc manual 看起来也很有用。