我有一个已部署到客户站点的 C 应用程序。它是在 HP-UX 上编译和运行的。用户报告了崩溃,我们获得了核心转储。到目前为止,我一直无法复制内部的崩溃。
正如您所怀疑的,核心文件/部署的可执行文件完全没有任何类型的符号。当我在 gdb 中加载它并执行 bt 时,我得到的最好的结果是:
(gdb) bt
#0 0xc0199470 in ?? ()
我可以在文件上做一个“字符串核心”,但我的理解是我得到的只是可执行文件中的所有字符串,所以在那里追踪任何东西似乎是半不可能的。
我确实有可执行文件的调试版本(使用 -g 编译),不幸的是,它比发布的版本更新了几个月。如果我尝试使用该集线器启动 gdb,我会看到:
warning: exec file is newer than core file.
Core was generated by `program_name'.
Program terminated with signal 11, Segmentation fault.
__dld_list is not valid according to __dld_flags.
#0 0xc0199470 in ?? ()
(gdb) bt
#0 0xc0199470 in ?? ()
虽然编译调试版本并将其部署在客户站点然后等待另一次崩溃是可行的,但由于多种原因,这相对困难且不可取。
我对代码非常熟悉,并且根据客户的错误报告对代码崩溃的位置有一个相对较好的了解。
有什么方法可以从这个核心转储中收集更多信息吗?通过字符串或其他调试器或任何东西?谢谢。