c++ - 如何在valgrind中为进程设置动态链接库路径和环境变量

标签 c++ c memory-leaks valgrind

我需要在运行时为进程设置 LD_LIBRARY_PATH、LD_PRELOAD 和一些环境变量,并使用 Valgrind 检测内存泄漏。

谁能建议一种在 valgrind 中为进程设置或传递这些变量的方法?

最佳答案

我遇到了类似的问题,试图在需要与 valgrind 使用并一直在使用的库不兼容的库的程序上运行 valgrind:

valgrind --trace-children=yes env LD_LIBRARY_PATH=your_library_path OTHER_VAR=foo your_program arg1 arg2...

env设置环境然后execs 你的程序。我们需要通过 --trace-children=yes valgrind 的参数,以便它继续跟踪 exec 系统调用。如果不设置 --trace-children=yes,valgrind 将在 exec 处停止跟踪,您将不会从 valgrind 上获得任何有用的输出你的程序

这种方法的一个潜在缺点是 valgrind 可能会报告 env 中的任何内存问题。我没有从这个源中看到任何误报(env 不是一个非常复杂的程序),但它可能会发生。

虽然我还没有用 LD_PRELOAD 尝试过(它还没有出现在我的用例中)。 Valgrind 确实设置了 LD_PRELOAD,因此您可能必须执行如下操作:

valgrind --trace-children=yes env LD_PRELOAD=$LD_PRELOAD:your_preload your_program

关于c++ - 如何在valgrind中为进程设置动态链接库路径和环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24745120/

相关文章:

c++ - 如何使用 typedef 或内联在 C++ 中调用此 x86 ASM CALL

c++ - 内在代码优化提示

python - 定义 c_char Python 的数组长度

c - 我应该检查相对误差或相对误差百分比吗?

c++ - Qt 从布局中取出一个小部件,但保持当前位置

c - opencv抓包导致内存分配错误

c - 如何使用列表项的 glib 函数释放内存

java - 分析 GC 报告时需要输入

java - 获取内存不足的堆空间错误 - 如何使用 Java 堆内存

c++ - UpdateSubresource 如何知道要复制多少?