我试图在Unix中使用addr2line命令,但每次它提供与??:0相同的输出.我正在命令addr2line -e a.out 0x4005BDC.我在使用valgrind工具运行这个a.out可执行文件时得到了这个地址,以找到内存泄漏.我还用-g选项编译了源代码.
我正在尝试让AddressSanitizer在其堆栈跟踪中生成行号.我试过Mac和Fedora 19系统并且有类似的结果.
这是一个简单的程序:
#include <cstdio>
#include <cstdlib>
int main(int argc,char **argv)
{
char *buf = (char *)malloc(5);
free(buf);
puts("get ready");
buf[4] = '3';
puts("done");
return(0);
}
Run Code Online (Sandbox Code Playgroud)
我编译它:
$ g++ -g -o x -fsanitize=address x.cpp
Run Code Online (Sandbox Code Playgroud)
我运行它(llvm-symbolizer在我的路径中):
$ ASAN_SYMBOLIZER_PATH=`which llvm-symbolizer` ASAN_OPTIONS=symbolize=1 ./x
get ready
=================================================================
==9309== ERROR: AddressSanitizer: heap-use-after-free on address 0x60040000dff4 at pc 0x40091f bp 0x7fff1b721140 sp 0x7fff1b721138
WRITE of size 1 at 0x60040000dff4 thread T0
#0 0x40091e in main (/raid/nfs_home/xv32/asan/x+0x40091e)
#1 0x3304021b44 in __libc_start_main (/lib64/libc.so.6+0x3304021b44)
#2 0x4007e8 (/raid/nfs_home/xv32/asan/x+0x4007e8)
0x60040000dff4 is …Run Code Online (Sandbox Code Playgroud)