lang存储器消毒剂;如何使其打印源行号 [英] clang memory sanitizer; how to make it print source line numbers
问题描述
我正在使用 clang ++ -fsanitize = memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -g -O0
编译程序我运行它,输出为:
I'm compiling my program with clang++ -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -g -O0
and when I run it, the output is:
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
How can I make it show line numbers like in the beautiful examples: http://clang.llvm.org/docs/MemorySanitizer.html
我怀疑这是不可能的,因为我的pragram是一堆巨大的嵌套lambdas: https://github.com/matiu2/json--11/blob/master/tests.cpp
I'm suspecting it might not be possible, due to my pragram being one giant nested bunch of lambdas: https://github.com/matiu2/json--11/blob/master/tests.cpp
推荐答案
使用地址清理器,我注意到我需要定义以下环境变量:
With the address sanitizer I noticed that I needed to have these environment variables defined:
-
ASAN_OPTIONS = symbolize = 1
(仅当使用GCC> 4.8编译时才需要)和 -
ASAN_SYMBOLIZER_PATH = $(其中llvm-symbolizer)
我认为该符号器是您想要的。它将符号转换为具有行号和列的文件名。
ASAN_OPTIONS=symbolize=1
(only needed when compiled with GCC > 4.8) andASAN_SYMBOLIZER_PATH=$(which llvm-symbolizer)
I think the symbolizer is what you're looking for. It transforms symbols to file names with line numbers and columns.
在内存消毒剂项目网站内容为:
符号化
Symbolization
将MSAN_SYMBOLIZER_PATH环境变量设置为
llvm-symbolizer二进制文件的路径(通常使用LLVM构建)。
Set MSAN_SYMBOLIZER_PATH environment variable to the path to llvm-symbolizer binary (normally built with LLVM). MemorySanitizer will use it to symbolize reports on-the-fly.
因此,您需要 MSAN_SYMBOLIZER_PATH
设置为类似于 ASAN_SYMBOLIZER_PATH
。
So you need MSAN_SYMBOLIZER_PATH
to be set analogous to ASAN_SYMBOLIZER_PATH
.
这篇关于lang存储器消毒剂;如何使其打印源行号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!