gdb导入的进程在崩溃/退出时转储? 我有C++软件(服务器),它崩溃了,我不知道确切的。 其中问题基于日志。我想做一些linux以后可以做的东西 崩溃或退出该进程的转储,我将以某种方式导入该进程 将文件发送到gdb,并分析正在做的事情和不应该做的事情

gdb导入的进程在崩溃/退出时转储? 我有C++软件(服务器),它崩溃了,我不知道确切的。 其中问题基于日志。我想做一些linux以后可以做的东西 崩溃或退出该进程的转储,我将以某种方式导入该进程 将文件发送到gdb,并分析正在做的事情和不应该做的事情,c++,linux,gdb,crash-dumps,C++,Linux,Gdb,Crash Dumps,过去有人做过什么吗? 有人能帮我提供一些信息、想法或什么吗 谢谢 您需要的是一个常规的内核转储,它与GDB一起工作以查找崩溃位置。 有关信息,请参阅 如果守护进程在当前目录所在的位置没有写入权限,则不会生成核心。要重定向它,请尝试 mkdir /tmp/corefiles chmod 777 /tmp/corefiles echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern 你在找核心文件吗?在启动守护进程的脚本中,添

过去有人做过什么吗? 有人能帮我提供一些信息、想法或什么吗


谢谢

您需要的是一个常规的内核转储,它与GDB一起工作以查找崩溃位置。 有关信息,请参阅

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

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

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


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

其他人回答说,您可以获得核心转储文件。请确保正确配置您的环境

另一种方法是,一旦守护进程已经运行,在崩溃之前,通过调试器对其进行调试


您还可以使用
gdb--args
/path/to/daemon守护进程参数启动守护进程

从技术上讲,这不是一个守护进程,这是屏幕上的控制台应用程序,这有什么区别吗?我已经设置为无限制,但没有核心文件。如果您是从控制台运行的,那么只需在gdb中启动它。不能,此应用程序必须始终保持活动状态,它在bash中运行,而当它崩溃时,当我连接gdb时,它将再次启动,gdb将不会让进程死亡,直到我退出gdb,我不能以任何方式将内核默认写入当前目录,因此启动程序的用户必须具有该目录的写入权限。这一点很好。但是当前目录下运行的程序的用户有
rwx
。如果您有守护进程的源代码,使用
-g-Wall
标志将它们编译到
gcc
编译器是很有帮助的。@Basile Starynkevitch:这两个标志都存在于Makefile中,然后获取内核并使用
gdb/path/to/daemon-core
调试它。您需要守护进程崩溃才能转储内核。。。但您需要确保核心大小限制足够大。谢谢,但这不适用于我,我不能附加到此,因为崩溃后的进程将不会释放绑定的端口,新的deamon将不会代替其他端口启动,并且此应用程序必须始终保持活动状态。
ulimit -c unlimited