代码之家  ›  专栏  ›  技术社区  ›  J. Polfer

Valgrind不会返回源代码行!

  •  5
  • J. Polfer  · 技术社区  · 14 年前

    我试过在我写的一个应用程序上运行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标记编译了我的应用程序,以放入调试符号。 有没有其他的原因让valgrind不显示源代码行?

    4 回复  |  直到 14 年前
        1
  •  8
  •   J. Polfer    14 年前

    我发现我通过了 -g -ggdb 标记为 g++ 在编译时。省略 -克 标志导致此问题消失。

        2
  •  3
  •   Employed Russian    14 年前

    有几个可能的原因:

    • 你可能无意中删除了你的可执行文件(很可能是解释),

    做什么 file prog_name 说什么?如果上面写着“脱光”,那就是个问题。您可能还需要检查其他工具,例如GDB是否知道地址0x805F29A处的符号:

    gdb prog_name
    (gdb) info symbol 0x805F29A
    
        3
  •  1
  •   Koteswara sarma    14 年前

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

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

        4
  •  1
  •   DrGC    11 年前

    对于其他有类似问题的读者(我有相同的但我的编译器选项,如果可以): 结果是valgrind需要可执行文件的路径,如果您不提供这个,那么它将运行正常,但它不会给您行号。在我的例子中,可执行文件在另一个目录中,在我的路径中,但是要获得行信息,我必须运行