gpt4 book ai didi

linux - 如何使用 GDB 分析故障转储文件

转载 作者:IT王子 更新时间:2023-10-29 00:23:10 27 4
gpt4 key购买 nike

我有一个在 Cent OS 下运行的服务器应用程序。服务器每秒响应许多请求,但每隔一小时左右就会反复崩溃并创建一个故障转储文件。情况真的很糟糕,我需要尽快找出坠机原因。

我怀疑问题是并发问题,但我不确定。我可以访问源代码和故障转储文件,但我不知道如何使用故障转储来查明问题。

非常感谢任何建议。

最佳答案

首先要查找的是程序崩溃时收到的错误消息。这通常会告诉您发生了什么样的错误。例如 “segmentation fault”“SIGSEGV” 几乎肯定意味着您的程序已经取消引用 NULL 或其他无效指针。如果程序是用 C++ 编写的,那么错误消息通常会告诉您任何未捕获的异常的名称。

如果您没有看到错误消息,请从命令行运行程序,或将其输出通过管道传输到文件中。

为了使核心文件真正有用,您需要在没有优化和调试信息的情况下编译您的程序。 GCC 需要以下选项:-g -O0。 (确保您的构建没有任何其他 -O 选项。)

一旦你有了核心文件,然后在 gdb 中打开它:

gdb YOUR-APP COREFILE

键入 where 以查看崩溃发生的位置。您基本上处于正常的调试 session 中 - 您可以检查变量、在堆栈中上下移动、在线程之间切换等等。

如果您的程序崩溃了,那么它可能是一次无效的内存访问 - 因此您需要寻找一个具有零值的指针,或者指向看起来不好的数据的指针。您可能无法在堆栈的最底部找到问题,您可能必须将堆栈向上移动几层才能找到问题。

祝你好运!

关于linux - 如何使用 GDB 分析故障转储文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1482061/

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