我有一个在CentOS 5.4上构build和运行的应用程序的堆栈跟踪。 该应用程序是在没有debugging的情况下构build的,因此堆栈跟踪中没有符号或行号,但只有地址,如下所示:
/opt/app/bin/myApp [0x22ec09e] /opt/app/bin/myApp [0x1fcdf31] /opt/app/bin/myApp [0x22ebbcb] ...
我也有相同的应用程序,但用debug(-g)构build。 所以我可以用gdb打开这个二进制文件,找出相应的源文件,函数名和这些地址对应的行号。
我的问题是,在CentOS 5.4上使用debugging构build这个二进制文件,在哪个操作系统上我使用gdb来parsing符号? 如果我在CentOS 5.4上用gdb打开它,并使用信息行或列表 ,结果会不同于在说Fedora 16时的结果吗? 我在CentOS 5.4和Fedora 16上做了一些testing,表明没有什么区别。 但是,我是否可以相信,总有这样的一天呢,或者我有一天会发现在某些情况下可能会有分歧呢?
注意:应用程序是用C ++编写的,并用g ++编译。 请让我知道是否需要任何额外的信息来回答这个问题。
如何debuggingLinux内核模块`init()`中的问题?
Windows中的Waf PDB输出(MSVC工具集)?
_NT_SYMBOL_PATH格式/是否recursion?
如何将函数地址转换为符号
我的C代码如何在运行时(在Linux中)find与地址对应的符号?
在哪个操作系统上,我使用gdb来解析符号?
否:地址到行号的映射在二进制链接时间是固定的。 一旦二进制链接,你可以在任何你想要的操作系统上执行映射。
我也有相同的应用程序,但用debug(-g)构建。
请注意,映射确实会根据您使用的优化标志而变化。 这将工作:
# original application build g++ -O2 foo.cc bar.cc -o app # same with debug symbols: g++ -O2 -g foo.cc bar.cc -o app_g
这是行不通的( app和app_g2之间的符号不匹配):
g++ -g foo.cc bar.cc -o app_g2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。