clang内存消毒剂;如何让它打印源代码行号

2024-06-20

我正在编译我的程序clang++ -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -g -O0当我运行它时,输出是:

matiu@matiu-laptop:~/projects/json++11/build$ ./tests 
.......==10534== WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x7fe7602d4a51 (/home/matiu/projects/json++11/build/tests+0x106a51)
    #1 0x7fe7602dfca6 (/home/matiu/projects/json++11/build/tests+0x111ca6)
    ...
    #31 0x7fe75edbaec4 (/lib/x86_64-linux-gnu/libc.so.6+0x21ec4)
    #32 0x7fe7602808dc (/home/matiu/projects/json++11/build/tests+0xb28dc)

  Uninitialized value was created by a heap allocation
    #0 0x7fe76026e7b3 (/home/matiu/projects/json++11/build/tests+0xa07b3)
    #1 0x7fe7602ee7da (/home/matiu/projects/json++11/build/tests+0x1207da)
    ...
    #18 0x7fe7602c1c4c (/home/matiu/projects/json++11/build/tests+0xf3c4c)
    #19 0x7fe7602873fa (/home/matiu/projects/json++11/build/tests+0xb93fa)

SUMMARY: MemorySanitizer: use-of-uninitialized-value ??:0 ??
Exiting

我怎样才能让它显示行号,就像美丽的例子一样:http://clang.llvm.org/docs/MemorySanitizer.html http://clang.llvm.org/docs/MemorySanitizer.html

我怀疑这可能是不可能的,因为我的程序是一大堆嵌套的 lambda:https://github.com/matiu2/json--11/blob/master/tests.cpp https://github.com/matiu2/json--11/blob/master/tests.cpp


使用地址清理程序,我注意到我需要定义这些环境变量:

  • ASAN_OPTIONS=symbolize=1(仅当使用 GCC > 4.8 编译时才需要)和
  • ASAN_SYMBOLIZER_PATH=$(which llvm-symbolizer)我认为象征符号就是您正在寻找的。它将符号转换为带有行号和列的文件名。

On the 内存消毒剂项目网站 https://code.google.com/p/memory-sanitizer/wiki/MemorySanitizer#Symbolization上面写着:

符号化

将 MSAN_SYMBOLIZER_PATH 环境变量设置为路径 llvm-symbolizer 二进制文件(通常使用 LLVM 构建)。内存消毒剂 将使用它来表示动态报告。

所以你需要MSAN_SYMBOLIZER_PATH被设置为类似于ASAN_SYMBOLIZER_PATH.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

clang内存消毒剂;如何让它打印源代码行号 的相关文章

随机推荐