首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GCC与-fsanitize=leak

GCC与-fsanitize=leak
EN

Stack Overflow用户
提问于 2015-07-03 15:20:56
回答 3查看 29.7K关注 0票数 8

我正在工作,在一个大型的C++项目上,让它用clang编译将是痛苦的,所以我被GCC困住了。

我想使用在以前的作业中已经与clang一起使用的-fsanitize=leak标记,但它似乎不起作用。

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

代码语言:javascript
运行
复制
#include <stdlib.h>
void FooBar() {
  malloc(7);
}
int main() {
  FooBar();
  return 0;
}

有了clang,它就像预期的那样工作:

代码语言:javascript
运行
复制
>> 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似乎什么也没发现:

代码语言:javascript
运行
复制
>> gcc -fsanitize=leak main.cpp
>> LSAN_OPTIONS=detect_leaks=1 ./a.out
>>

我是不是错过了一个很好的环境变量?有人和gcc合作过吗?

编辑:例如:

代码语言:javascript
运行
复制
g++ -fsanitize=address main.cpp
ASAN_OPTIONS=detect_leaks=1 ./a.out

但我不能这么做:好处的缺点太多了。我只想要检漏。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-06 07:56:46

我用gcc 5.1解决了这个问题(我用了4.9)。

编辑:看起来5.2也不起作用,EDIT2:它不适用于由ubuntu15.10 (5.2.1)提供的gcc,但是我从源代码中重新编译了一个5.2.0,运行良好。我真的毫无头绪。

票数 2
EN

Stack Overflow用户

发布于 2015-07-03 15:26:27

您必须阅读此文件并使用修补程序:

https://gcc.gnu.org/ml/gcc-patches/2013-11/msg01874.html

票数 2
EN

Stack Overflow用户

发布于 2016-04-05 10:23:51

我也有同样的问题(Ubuntu15.04和gcc 4.9.2)。

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

( 1)编译过程中的力连接

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

( 2)用

./a.out

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31210053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档