這是我的代碼:addr2line打印 「??:0」 即使我用`GCC -g`
/* backtrace_foo1.c */
#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
#define BACKTRACE() \
do {\
void *array[20];\
size_t size;\
char **strings;\
size_t i;\
size = backtrace(array, 20);\
strings = backtrace_symbols(array, size);\
for (i = 0; i < size; i++) {\
printf ("%s\n", strings[i]);\
}\
free (strings);\
} while(0)
void func1()
{
BACKTRACE();
}
void func()
{
func1();
}
int main(int argc, char **argv)
{
func();
return 0;
}
我通過gcc -g -rdynamic
編制,並得到
./a.out( func1的+ 0x1F的)[0x400905]
./a.out(func+0xe)[0x40097a]
./a.out(main+0x19)[0x400996]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x318ae1ecdd]
./a.out()[0x4007f9]
然後我使用addr2line -e ./a.out -f 0x4007f9
,我得到
_start
??:0
這是我的平臺
gcc版本5.3.0(GCC)
的Linux 3.10.0_1-0-0-8
對於將來的問題,請[閱讀關於如何提出好問題](http://stackoverflow.com/help/how-to-ask)。並且不要忘記實際*要求*一個。 –