Valgrind不会返回源代码行!

时间:2010-10-25 21:16:59

标签: c++ debugging valgrind

我尝试在我编写的应用程序上运行valgrind(memcheck和massif),但我得到的只是执行函数的地址。

---------------------------------
Context accounted for  0.6% of measured spacetime
  0x805F29A: (within prog_name)
  0x8141740: (within prog_name)

Called from:
   0.6% : 0x812E077: (within prog_name)

---------------------------------
Context accounted for  0.5% of measured spacetime
  0x805F29A: (within prog_name)
  0x81418FB: (within prog_name)

Called from:
   0.5% : 0x812E077: (within prog_name)

我使用-g标志编译了我的app以将调试符号放入。还有其他原因导致valgrind不显示源代码行吗?

编辑:valgrind版本3.2.1-Debian; g ++ 4.3.1

4 个答案:

答案 0 :(得分:8)

我发现在编译时我将-g-ggdb标记传递给g++。省略-g标志会导致此问题消失。

答案 1 :(得分:2)

有几个可能的原因:

  • 您可能无意中剥夺了可执行文件(最可能的解释),
  • 您可能正在执行JITted代码(虽然地址看起来不是这样)。

file prog_name说什么?如果它说“剥离”,那就是一个问题。您可能还想检查是否有其他工具,例如GDB知道地址0x805F29A的符号是什么:

gdb prog_name
(gdb) info symbol 0x805F29A

答案 2 :(得分:1)

我猜,你没有提到正确的标志,而是使用默认标志。

- show-reachable是一个应该启用的标志,请查看其他标志并启用它们。

- 干杯

答案 3 :(得分:1)

对于有类似问题的其他读者(我有相同的但我的编译器选项,好的): 事实证明,valgrind需要可执行文件的路径,如果你不给它,那么它将运行正常,但它不会给你行号。在我的情况下,可执行文件位于不同的目录中,该目录位于我的PATH中,但要获取必须运行的行信息

valgrind --leak-check = full path_to_myprogram / myprogram