gpt4 book ai didi

g++ - GCC 和 -fsanitize=leak

转载 作者:行者123 更新时间:2023-12-02 15:22:13 25 4
gpt4 key购买 nike

我正在开发一个大型 C++ 项目,用 clang 编译它会很痛苦,所以我坚持使用 GCC。

我想使用很好的 -fsanitize=leak 标志,我在之前的工作中已经与 clang 一起使用过该标志,但它似乎不起作用。

我做了一个非常简单的例子来测试它:

#include <stdlib.h>
void FooBar() {
malloc(7);
}
int main() {
FooBar();
return 0;
}

使用 clang 可以按预期工作:

>> clang -fsanitize=leak main.cpp
>> LSAN_OPTIONS=detect_leaks=1 ./a.out
=================================================================
==18052==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 7 byte(s) in 1 object(s) allocated from:
#0 0x41dcbc (~/dev/addresssanitizertest/a.out+0x41dcbc)
#1 0x431ac3 (~/dev/addresssanitizertest/a.out+0x431ac3)
#2 0x431ae3 (~/dev/addresssanitizertest/a.out+0x431ae3)
#3 0x7f8077e71a3f (/lib/x86_64-linux-gnu/libc.so.6+0x20a3f)
SUMMARY: LeakSanitizer: 7 byte(s) leaked in 1 allocation(s).
>>

但是使用 gcc 它似乎没有检测到任何东西:

>> gcc -fsanitize=leak main.cpp
>> LSAN_OPTIONS=detect_leaks=1 ./a.out
>>

我是否错过了一些不错的环境变量之类的东西?有人让它与 gcc 一起工作吗?

编辑:这适用于例如:

g++ -fsanitize=address main.cpp
ASAN_OPTIONS=detect_leaks=1 ./a.out

但我不能这样做:性能缺点太大了。我只想进行泄漏检测。

最佳答案

我也遇到了同样的问题(使用 Ubuntu 15.04 和 gcc 4.9.2)。

使用ldd我注意到liblsan.so没有链接,所以我是如何修复它的:

1) 编译期间强制链接

>> gcc -fsanitize=leak main.cpp -llsan

2) 执行

./a.out

关于g++ - GCC 和 -fsanitize=leak,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31210053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com