我在系统编程课程中,我们其中一项任务的基于python的测试驱动程序需要在C编译的可执行文件上运行Valgrind。
我正在尝试将Valgrind放在笔记本电脑上。我正在使用Ubuntu 18.04.4 LTS。我正在阅读Ubuntu wiki,而Valgrind上的页面说“已经安装了带有调试符号的软件包”。我检查了一下page they reference,仍然不知道需要使用调试符号安装哪些软件包。
[我正在阅读一些堆栈溢出的答案,this one提到“ Valgrind很容易用于C / C ++代码,但在配置时甚至可以用于其他语言。” Valgrind quickstart guide也未给出有关调试符号的警告。它只是说在编译时使用标志-g
。
Ubuntu Wiki关于调试符号的警告是否仅适用于非C语言编译的其他程序?
Wiki讲述了您的代码链接到的所有库。为了分析来自valgrind的stracktrace,最好与这些库的调试版本链接。这些库是什么仅取决于您的应用程序。
想象您开发了一些应用程序。然后,您想跟踪一些内存泄漏或分段错误。因此,您可以在valgrind下运行已编译的程序。您可以使用-g
标志编译程序,以在valgrind打印出分配的堆栈跟踪信息时从valgrind获得好消息。由于有了这个标志,您可以在堆栈跟踪中看到更多信息,例如您编码的函数的确切函数名称。
维基怎么说。它说明了您的代码链接到的所有库。例如。您与boost链接的堆栈跟踪可能还包括来自boost的函数调用。为了在堆栈跟踪中也包含有关来自[[boost的函数名称的更多调试信息,您需要链接使用调试符号编译的boost。
您在Wiki上找到的建议是,如果您链接到例如一些来自xserver-xorg-core
的库,那么也可以同时安装xserver-xorg-core-dbg
,与它链接并在valgrind下运行这样的链接应用程序。这样,即使在您未编码但仅由xserver-xorg-core(-dbg)
提供的库使用的部分中,您的堆栈跟踪也将看起来更好。仅此而已。他们引用的页面说:
如果要从Ubuntu提供的应用程序调试崩溃,您正在开发自己的产品(由第三方提供),或者需要经常调试特定库的符号,这对安装相关的调试包。对于许多(但不是全部)软件包,只需将-dbg后缀添加到要安装的软件包名称。例如:
sudo apt-get install xserver-xorg-core-dbg
这与我写的内容相同。我只是想详细说明。