0

我开始从这里学习C。我在第 5 章,练习 4 中学习使用 valgrind。页面上的源代码窗口 17 中解释了该问题。

在 Valgrind'ing 文件 (ex4.c) 后,我的输出缺少页面上显示的 Valgrind 输出,具体方式如下:

  1. ???代替_itoa_word (_itoa.c:195)

  2. 未识别 C 库文件中行号的位置。相反,给出了共享库文件 (.so) 的路径。

下面显示了一个比较两个输出的示例。

我期待什么

==3082== 使用大小为 8 的未初始化值

==3082== 在 0x4E730EB:_itoa_word (_itoa.c:195)

==3082== 由 0x4E743D8: vfprintf (vfprintf.c:1613)

==3082== 由 0x4E7E6F9: printf (printf.c:35)

==3082== 由 0x40052B: 主要 (ex4.c:11)


我得到了什么

==14647== 在 0x407D256: ??? (在 /lib/tls/i686/cmov/libc-2.11.1.so 中)

==14647== 0x4080B89:vfprintf(在 /lib/tls/i686/cmov/libc-2.11.1.so 中)

==14647== by 0x40882BF: printf (in /lib/tls/i686/cmov/libc-2.11.1.so)

==14647== 由 0x8048401: 主要 (ex4.c:9)

请告诉我如何纠正我的 valgrind 输出。我正在使用 Ubuntu-10.10,32 位版本。我使用源代码安装了 Valgrind-3.8.1。我的 gcc 版本是 4.3.3 和 glibc 版本 2.11.1

4

1 回答 1

1

一些 Linux 发行版附带的库已经去掉了它们的符号。生成的库要小得多,但缺少在 gdb 或 valgrind 中调试它们所需的函数名称。

您通常可以找到一个包,其中包含每个库的调试符号。例如,在 Ubuntu 上,它是库的包名称,带有“-dbg”后缀。对于 C 库 libc6,它是 libc6-dbg。安装它:

sudo aptitude install libc6-dbg
于 2012-11-01T20:25:43.943 回答