我正在尝试自动化一些调试任务。在某些情况下,我将$ra
[this is a MIPS machine] 的值和堆栈的一部分打印为十六进制地址。在调试期间,我使用addr2line
将它们转换file:line
成对。
我想自动化这个过程。
问题是 addr2line 返回的文件名与__FILE__
编译时的值相等;即,传递给编译器的文件名。这通常是foo.c
,有时是src/foo.c
。由于我的项目总共有数百个目录,这可能不足以唯一标识文件(可能有1/foo.c
,2/foo.c
等)。即使它是确定性的,在我的屏幕上为每个参数开始运行 find 似乎效率很低[我想我可以构建一个哈希表并保存它们,但我想将其保留为一个简单的 bash 脚本]
GDB 似乎得到了正确的文件。如果我查看带有调试符号的实际源文件,我还可以看到在文件名之后似乎有__FILE__
[即,如果__FILE__
是src/foo.c
,并且它真的在/home/me/projects/something/comp1/src/foo.c
,我会/home/me/projects/something/comp1
在文件中看到的完整路径。我怎样才能以编程方式得到这个?
谢谢。