如何在Ubuntu中提供带有符号文件的addr2line以与剥离的二进制文件一起使用?

问题描述:

我有一个在Ubuntu中运行的C++应用程序。我想要做的是去掉其符号的应用程序二进制文件,以使它们不是二进制文件的一部分,但是使用addr2line实用程序通过引用符号文件而不是二进制文件的一部分符号来获取回溯信息。这可能吗?如何在Ubuntu中提供带有符号文件的addr2line以与剥离的二进制文件一起使用?

我已经得到了迄今使用生成符号文件最接近:

strip MyBinary -o thesymbols.sym 

然后我尝试使用该文件与addr2line程序,如下所示:

addr2line 0x779e81 -b thesymbols.sym 

但这产生了抱怨:

addr2line: 'a.out': No such file 

于是我尝试:

addr2line 0x779e81 -e MyBinary -b thesymbols.sym 

但是,这产生了抱怨:

addr2line: MyBinary: Invalid bfd target 

有人能指导我的方向是正确的?我究竟做错了什么?

在此先感谢您的帮助!

编辑:

现在我意识到,当我以为我是创造,只是包含符号信息与下列文件:

strip MyBinary -o thesymbols.sym 

,我实际上只创建一个精简的二进制叫thesymbols.sym

这就是说,我原来的问题仍然存在。有任何想法吗?

您可以使用带有addr2line的未剥离二进制文件,其中的地址是运行剥离二进制文件的地址。 该地址与.text段落的开始相关,在剥离和未剥离二进制文件中相同。