如何查找调试信息是否包含相对路径或绝对路径?
我正在尝试使用以下链接输出带注释的源(opannotate)。 http://oprofile.sourceforge.net/doc/opannotate.html
我想了解它,以便提供以下选项以及opannotate。
- base-dirs / -b [路径] / 以逗号分隔的路径前缀列表。当调试信息指定系统上不存在的源的绝对路径时,可以使用此命令将OProfile指向源文件的其他位置。从调试源文件路径中删除前缀,然后在--search-dirs指定的搜索目录中搜索。
- search-dirs / -d [路径] 以逗号分隔的搜索源文件的路径列表。当调试信息仅包含相对路径时,这对于查找源文件很有用。
感谢。
答案 0 :(得分:4)
如果编译期间C_FLAGS
包含-g
参数,则各个源文件的所有路径都包含在生成的二进制可执行文件的.debug_info
部分中。
以下命令将转储到控制台,这是使用debug-info构建的二进制文件中存在的各种 .c
源文件的所有路径的完整列表。
$ readelf --debug-dump=info <binary-executable> | grep "\.c" | awk '{print $8}'
要在二进制文件的debug-info中搜索特定源文件的路径,可以根据需要将grep "\.c"
修改为grep "<filename>"
。
有关详细信息,请查看 debug-info in binaries 上的这篇优秀文章。