相关疑难解决方法(0)

如何在Linux中使用addr2line命令?

我试图在Unix中使用addr2line命令,但每次它提供与??:0相同的输出.我正在命令addr2line -e a.out 0x4005BDC.我在使用valgrind工具运行这个a.out可执行文件时得到了这个地址,以找到内存泄漏.我还用-g选项编译了源代码.

c linux valgrind addr2line

46
推荐指数
5
解决办法
8万
查看次数

使用AddressSanitizer输出获取行号?

我正在尝试让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)

debugging address-sanitizer

6
推荐指数
1
解决办法
4680
查看次数

标签 统计

addr2line ×1

address-sanitizer ×1

c ×1

debugging ×1

linux ×1

valgrind ×1