我想在我的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。 – 2011-05-10 05:58:56
爲什麼不使用gdb,我可以問一下嗎?此外,GNU libc手冊的[Backtraces部分](http://www.gnu.org/s/hello/manual/libc/Backtraces.html)看起來很有用。 – 2011-05-10 06:53:55