提问人:waly karim 提问时间:7/19/2023 更新时间:7/23/2023 访问量:65
尝试在 Ubuntu 上运行 valgrind 时出错(ASan 运行时在初始库列表中不排在第一位)
Error while trying to run valgrind on Ubuntu (ASan runtime does not come first in initial library list)
问:
我正在尝试运行 valgrind 以查找我的 c++ 程序中的内存泄漏。我已经在我的CMake中设置了标志-fsanitize=adress。但是,每当我在设置此标志后尝试使用或不使用valgrind运行程序时,我都会收到错误:。ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD.
然后我尝试设置 LD_PRELOAD=/path/libasan.so.5,但它没有任何区别。我仍然收到同样的错误。谁能给我一些关于可能导致此问题的原因以及如何解决它的见解?我正在使用 Ubuntu 20.04 和 gcc 9.6。
首先,当我意识到可能存在内存泄漏时,我安装了 valgrind 并设置了标志 fsanitize=adress 和 -fsanitize=leak。第一次,然后编译程序并使用 valgrind 运行它。第一次运行成功,valgrind 产生了输出。然后,我对程序进行了一些更改,成功构建了它,并尝试再次使用 valgrind 运行它,这导致了错误。我尝试使用 LD_PRELOAD=/path/to/libasan.so.5,但它似乎没有解决问题
答:
我正在尝试运行 valgrind 以查找我的 c++ 程序中的内存泄漏。我已经在我的CMake中设置了标志-fsanitize=adress
您正在尝试同时使用两个单独的工具:Valgrind 和 AddressSanitizer。不要这样做 - 使用一个或另一个 - 这些工具可以单独发现内存泄漏(以及更多),并且不是为协同工作而设计的。
即使这确实有效,它也会不必要地缓慢,因为 Valgrind 会花时间模拟/执行 AddressSanitizer 插入到您的程序中的指令。因此,您将受到 60 倍减速的影响,而不是 ASan 的典型减速 4 倍或 VG 的典型减速 15 倍。
上一个:交叉编译时动态链接的 Go 程序
评论