【问题标题】:Dump of process in crash/quit time for gdb import?在 gdb 导入的崩溃/退出时间转储进程?
【发布时间】:2012-01-09 13:34:03
【问题描述】:

我有 C++ 软件(服务器)和它的崩溃,我不知道确切 问题基于日志。我想做一些 linux 之后的东西 崩溃或退出该过程的转储,我将以某种方式导入此 向gdb 提交文件并分析不应该做的事情。

过去有人做过吗? 有人可以帮我提供一些信息方面的想法吗?

谢谢!

【问题讨论】:

    标签: c++ linux gdb crash-dumps


    【解决方案1】:

    您需要的是一个常规的核心转储,它与 GDB 一起查找崩溃位置。 有关信息,请参阅http://linux.die.net/man/5/core

    如果守护进程没有当前目录的写权限,则不会生成内核。要重定向它,请尝试;

    mkdir /tmp/corefiles 
    chmod 777 /tmp/corefiles 
    echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern 
    

    【讨论】:

    • 如果你有你的守护进程的源代码,用-g -Wall 标志编译它们到gcc 编译器会很有帮助。
    • @Basile Starynkevitch:Makefile 中存在两个标志
    • 然后获取内核并使用gdb /path/to/daemon core进行调试
    • 您需要守护进程崩溃才能转储核心...但您需要确保核心大小限制足够大。
    【解决方案2】:

    您在寻找核心文件吗?在启动你的守护进程的脚本中,添加这个命令(假设脚本的解释器是bash):

    ulimit -c unlimited
    

    将核心文件的最大大小设置为“无限”(默认情况下通常为 0)。

    【讨论】:

    • 技术上这不是一个守护进程,这是屏幕中的控制台应用程序,这有什么不同?我已设置为无限制,但没有核心文件。
    • 如果你从控制台运行,那么只需在 gdb 中启动它。
    • 不能,这个应用程序必须始终保持活动状态,它在 bash 中运行,当它崩溃时它会在我附加 gdb 时重新启动,然后 gdb 不会让进程死亡,直到我退出 gdb,我可以无论如何都买不起
    • 核心默认写入当前目录,所以启动程序的用户必须对该目录有写权限。
    • 好点。但是当前目录中运行的程序的用户有rwx
    【解决方案3】:

    正如其他人所说,您可以获得核心转储文件。请务必正确配置您的环境。

    另一种方法是,一旦守护程序已经在运行并且在它崩溃之前,它是通过调试器attach 它。

    你也可以用gdb --args启动你的守护进程/path/to/daemon daemon-arguments ...

    【讨论】:

    • 谢谢,但不适用于我,我不能附加到这个,因为崩溃后的进程不会释放绑定的端口,新的守护进程不会代替其他进程启动,这个应用程序必须保持活动状态总是。
    猜你喜欢
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 2010-12-15
    相关资源
    最近更新 更多