valgrind/callgrind 可以在发布的可执行 C++ 程序上工作吗?

fee*_*ree 3 c++ linux profiling valgrind

我知道valgrind可以调用memcheck来进行内存泄漏检查,这种情况下编译出来的C++可执行程序必须包含调试信息。那么,如果我想使用 valgrind/callgrind 来执行分析,可执行文件是否必须包含调试信息?我运行了一个小测试,似乎 valgrind/callgrind 可以在没有调试信息的情况下发布可执行程序。有人可以确认吗?

Man*_*mar 6

从官方Valgrind文档链接,可以找到以下信息:

2.2. 入门

首先,考虑是否可能是有益的,以重新编译应用程序,并支持库与调试信息启用(-g选项)

如果没有调试信息,最好的Valgrind工具将能够做的是猜测特定代码段属于哪个函数,这使得错误消息和分析输出几乎毫无用处。使用 -g,您将获得直接指向相关源代码行的消息。

如果您使用 C++,您可能要考虑的另一个选项是 -fno-inline。这样可以更轻松地查看函数调用链,这有助于减少在大型 C++ 应用程序中导航时的混淆。例如,使用此选项时,使用 Memcheck 调试 OpenOffice.org 会更容易一些。您不必这样做,但这样做有助于 Valgrind 生成更准确和更少混淆的错误报告。如果您打算使用 GNU GDB 或其他一些调试工具调试您的程序,那么您可能已经像这样设置了。

因此,推荐的步骤是使用 -g 选项重新编译您的程序,以从 Valgrind 获取最大信息。