gpt4 book ai didi

c - 调试没有符号的核心文件

转载 作者:太空狗 更新时间:2023-10-29 16:32:18 24 4
gpt4 key购买 nike

我有一个已部署到客户站点的 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 ?? ()

虽然编译调试版本并将其部署在客户站点然后等待另一次崩溃是可行的,但由于多种原因,这将相对困难且不可取。

我对代码非常熟悉,并且根据客户的错误报告,我相对清楚代码中哪里崩溃了。

有什么方法可以从这个核心转储中收集更多信息?通过字符串或其他调试器或其他方式?谢谢。

最佳答案

来自 gdb 的此类响应:

(gdb) bt
#0 0xc0199470 in ?? ()

也可能发生在堆栈被缓冲区溢出破坏的情况下,返回地址在内存中被覆盖,因此程序计数器被设置为看似随机的区域。

即使是使用相应符号数据库的构建也可能导致符号查找错误(或看起来很奇怪的回溯)的一种方式。如果您在拥有符号表后仍然遇到此问题,则您的问题很可能是您的客户数据导致您的代码出现一些问题。

关于c - 调试没有符号的核心文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1050482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com