【发布时间】:2018-04-22 09:39:12
【问题描述】:
我在 linux 上使用 gcc 4.8.5。我想使用地址清理程序,但它不返回有关该程序的任何信息。标志:
SET(CMAKE_CXX_FLAGS "-Wall -Wno-error -g -std=c++11 -fno-omit-frame-pointer -fsanitize=address")
SET(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=address")
链接库:
target_link_libraries(testcpp asan)
有内存泄漏的测试程序:
int main()
{
int *prt = new int;
return 0;
}
怎么了?
【问题讨论】:
-
直接在命令行编译你的程序(
cmake只是让我们感到困惑)。在您的问题中显示编译命令。 -
BTW GCC4.8 已经很老了,而且它的地址清理器已经取得了很大的进步(特别是在 GCC 5 和 GCC 6 中)。尝试使用更新的 GCC(如果可能,使用 GCC 7)
-
我的理解是,如果你已经指定了
-fsanitize=address,就不需要链接asan。此外,您必须实际运行程序才能运行消毒剂。 -
也许你想要
-fsanitize=leak? gcc.gnu.org/onlinedocs/gcc-6.3.0/gcc/…
标签: c++ linux gcc memory-leaks