我尝试在我编写的应用程序上运行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答案 0 :(得分:8)
我发现在编译时我将-g
和-ggdb
标记传递给g++
。省略-g
标志会导致此问题消失。
答案 1 :(得分:2)
有几个可能的原因:
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