我需要在运行时为进程设置 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/