各位大佬,你们是采用什么工具来检测 C++内存泄露等问题?

2018-09-15 09:51:30 +08:00
 Machard
4330 次点击
所在节点    C
13 条回复
icylogic
2018-09-15 10:03:09 +08:00
valgrind cuda-memcheck nv profiler
dbow
2018-09-15 10:11:49 +08:00
用自己的内存函数 , 演示一下
void *my_malloc(size_t n) {
auto p = malloc(n);
log(p, n);
return p;
}
void my_free(void *p ) {
delete_from_log(p)
free(p)
}
std::atexit =[]() {
dump_log()
}
Machard
2018-09-15 10:29:06 +08:00
非常感谢
@icylogic
@dbow
,目前根据楼上推荐的方法进行逐项检查,再次感谢。
changnet
2018-09-15 11:32:31 +08:00
win 下有 visual leak detector,linux 下 valgrind,我自己是重写 new delete 然后计数,每次程序退出没释放时打个日志
nanlou
2018-09-15 11:42:49 +08:00
类似 sonarqube 之类的代码扫描工具也可以扫出一些内存相关的问题。另外 AddressSanitizer 之类的也可以了解一下。
yanaraika
2018-09-15 12:29:45 +08:00
gcc a.c -g -fsanitize=address,undefined 比 valgrind 快多了
yanaraika
2018-09-15 12:32:15 +08:00
或者简单点 glibc 的 mtrace
Machard
2018-09-15 12:36:59 +08:00
感谢
@changnet @yanaraika @nanlou ,提供的方法。目前采用的是 valgrind 工具进行检测。程序本身主要涉及复杂的数值计算,目前找到了一些问题,但是还存在内存泄露,还在排查。
zhuangzhuang1988
2018-09-15 12:38:47 +08:00
大 intel 的 https://software.intel.com/en-us/intel-inspector
可以检查资源(不仅仅是内存)和线程问题
where2go
2018-09-15 17:08:05 +08:00
@yanaraika #6 请问加了这个参数后能处理哪些情况的呢
yanaraika
2018-09-16 05:59:04 +08:00
@where2go 地址越界、退出时有内存没释放、未定义行为
FrankHB
2018-09-16 06:32:52 +08:00
valgrind DrMemory asan msan lsan ubsan
innoink
2018-09-19 08:32:34 +08:00
tcmalloc

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/489545

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX