【发布时间】:2021-08-14 17:28:06
【问题描述】:
我有一个长时间运行的服务器程序,我想使用 asan 来检测这个程序的内存泄漏。 我的解决方案:
CXXFLAGS+="-fsanitize=address -fno-omit-frame-pointer -fsanitize-recover=address"
LDFLAGS+="-lasan"
# start the program
LD_PRELOAD=libasan.so.5 ASAN_OPTIONS=halt_on_error=false:alloc_dealloc_mismatch=0 ./bin/server > asan_report 2>&1 &
但似乎只报告一次 我希望它定期报告,怎么做?
【问题讨论】:
-
你打算如何区分将来不会释放的内存和将来会释放但尚未释放的内存?在程序结束时,释放列表是最终的,您可以看到丢失的内容。但在一个项目中,ASAN 无法窥视未来并预测会发生什么。
-
您的
LDFLAGS设置不正确,应该是LDFLAGS=-fsanitize=address(原始-lasan可能有效但不可靠,Asan 开发人员不鼓励使用它)。 -
而不是
LD_PRELOAD=libasan.so.5更好地做一个更通用和便携的LD_PRELOAD=$(gcc -print-file-name=libasan.so)。
标签: c++ memory-leaks g++ address-sanitizer