我们有一个客户报告了AIX服务器上的崩溃,他们为我们提供了核心转储。 核心转储由发布库和可执行文件生成。
现在,如果我使用dbx进行分析,我就无法获得行号。
有没有办法将源代码附加到dbx?我可以使用调试信息重新编译库和可执行文件,然后将它们加载到dbx,那会起作用吗?
或者我是否需要向客户提供我们的libs和可执行文件的调试版本,让他们重现崩溃并发送核心转储?
答案 0 :(得分:0)
核心文件需要匹配您尝试将dbx附加到的相同可执行文件。如果你想要调试符号,你需要让客户运行一个调试版本(使用-g编译,未经过剥离)并向你发送该崩溃产生的核心。
使用dbx显示源是另一个步骤,see the -I option or "use" command将dbx指向与调试版本相关联的源文件。
请注意,我经常发现在调试与发布版本中不会发生崩溃。有时会令人沮丧。
如果您特别喜欢冒险,可以使用“where”(显示当前函数和该函数中的偏移量)的组合来显示汇编程序。从源文件生成汇编程序(xlc中的-S选项),您可以非常接近导致问题的C / C ++语句。在尝试重新创建在没有调试版本的情况下在生产中转储核心的东西时,我已经做了很多次。
祝你好运!