我开始从here学习C语言。我在第5章练习-4中学习使用valgrind。 this页面上的源代码窗口17中解释了该问题。
根据Valgrind的文件(ex4.c),我的输出缺少来自this页面上显示的Valgrind输出,以下列方式;
???
代替_itoa_word (_itoa.c:195)
未识别C库文件中行号的位置。而是给出了共享库文件(.so)的路径。
我期待什么
== 3082 ==使用大小为8的未初始化值
== 3082 ==在0x4E730EB:_itoa_word(_itoa.c:195)
== 3082 == by 0x4E743D8:vfprintf(vfprintf.c:1613)
== 3082 == by 0x4E7E6F9:printf(printf.c:35)
我得到什么
== 14647 ==在0x407D256:??? (在/lib/tls/i686/cmov/libc-2.11.1.so中)
== 14647 == by 0x4080B89:vfprintf(在/lib/tls/i686/cmov/libc-2.11.1.so中)
== 14647 == by 0x40882BF:printf(在/lib/tls/i686/cmov/libc-2.11.1.so中)
请告诉我如何更正我的valgrind输出。我使用的是Ubuntu-10.10,32位版本。我使用source安装了Valgrind-3.8.1。我的gcc版本是4.3.3和glibc版本2.11.1
答案 0 :(得分:1)
某些Linux发行版附带了已剥离符号的库。结果库要小得多,但缺少在gdb或valgrind中调试它们所需的函数名。
您通常可以找到一个包含每个库的调试符号的包。例如,在Ubuntu上,它是库的包名,后缀为“-dbg”。对于C库libc6,它是libc6-dbg。安装时使用:
sudo aptitude install libc6-dbg