相关疑难解决方法(0)

如何使用clang的-fsanitize = address在调试输出中获取行号?

我正在尝试调试由clangwith 检测到的内存错误asan,但是错过了valgrind.但我不能得到我的clang构建二进制文件给我任何有用的调试信息.我可以用一个简短的测试程序证明这一点:

#include <stdlib.h>
#include <string.h>

int main(void)
{
    char *a = malloc(8);
    memset(a, 0, 9);
    free(a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

(显然这个错误被接收valgrind,它纯粹是为了显示问题clang.)

我用Clang 3.4-1ubuntu1编译它是这样的:

clang -fsanitize=address -fno-sanitize-recover -o test -O0 -g test.c
Run Code Online (Sandbox Code Playgroud)

果然,./test中止,我看到一些调试信息:

==3309==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60200000eff8 at pc 0x43e950 bp 0x7fff168724f0 sp 0x7fff168724e8
WRITE of size 9 at 0x60200000eff8 thread T0
    #0 0x43e94f (/home/jason/Code/astest/test+0x43e94f)
    #1 0x7faa43c47de4 (/lib/x86_64-linux-gnu/libc.so.6+0x21de4)
    #2 0x43e6ac (/home/jason/Code/astest/test+0x43e6ac)
0x60200000eff8 is …
Run Code Online (Sandbox Code Playgroud)

c clang address-sanitizer

11
推荐指数
3
解决办法
5984
查看次数

标签 统计

address-sanitizer ×1

c ×1

clang ×1