我正在编译地址消毒剂,我试图得到泄漏消毒剂报告,但它只产生一个地址消毒剂报告,而不是产生泄漏消毒剂报告后,程序退出的某种原因。
我在Centos 7.9上用G ++9.3.1编译,Cmake版本为3.16.2。
我正在编译
列表(添加SAN标志"-fsanitize =地址""-fno省略帧指针""-g3")
启用泄漏清理程序(根据文档,应在Linux上使用地址清理程序启用)
我设置
Environment="ASAN_OPTIONS=log_path=/var/log/foo_asan.log:detect_leaks=1"
在service文件中,然后用systemd运行我的程序(也在Centos 7. 9上)。用systemctl停止程序会像预期的那样创建一个foo_asan. log文件,但是日志文件只有AddressSanitizer报告,而没有LeakSanitizer报告。我如何获得Leaksanitizer报告?
1条答案
按热度按时间brgchamk1#
日志文件只有AddressSanitizer报告,而没有LeakSanitizer报告。
默认情况下,AddressSanitizer在出错时会中止。LeakSanitizer只在
exit
上运行,因为你的程序不是exit
,所以你不会得到泄漏报告。下面是一个同时存在内存泄漏和缓冲区溢出的示例程序:
如果我用
clang -g -fsanitize=address leaky.c -o leaky
构建它,然后用ASAN_OPTIONS=detect_leaks=1
运行它,我只会得到错误报告:This answer展示了如何使程序在出错时 * 不 * 中止。当我这样做时,我同时得到AddressSanitizer和LeakSanitizer报告: