GDB自杀(突然杀死调试进程)

Sho*_*ker 2 gdb

我正在通过 GDB(版本 7.12,Ubuntu 14.04)运行一个非常大的应用程序(二进制文件有 2GB,主要是因为调试符号),因此我可以捕获所有崩溃并具有完整的回溯 + 核心转储: ulimit -c unlimited 以及bt / bt full / info thread / generate-core-file崩溃后。

然而,我很少遇到一些奇怪的行为:应用程序立即关闭并Program terminated with signal SIGKILL, Killed.记录在日志中,但是我 100% 肯定系统中没有其他任何东西会杀死它,对此负责的是 GDB。发生这种情况时,它不会生成任何回溯/核心转储/等。

据我所知,到目前为止,这种情况发生在正常运行时间较长(1 天)的情况下。每当正常运行时间约为 1 天时发生正常崩溃(我不是在谈论终止情况,而是正常崩溃)并且 GDB 生成回溯 + 核心转储,核心转储大小约为 100GB。所以现在唯一可以假设的是 GDB 消耗了太多内存来处理它。不幸的是,我不知道发生这种情况时的确切内存使用情况(因为这是意外的),但交换文件几乎是空的,这很可能意味着它并没有真正耗尽内存。

关于如何调试这种情况的想法?

ks1*_*322 5

二进制文件有 2GB

您可能内存不足,并且您的应用程序可能被 OOM 杀手杀死。要确认这一点,请查看和消息dmesg的输出。oom-killerKilled process

但交换文件几乎是空的,这很可能意味着它并没有真正耗尽内存

这取决于vm.swappinessproc 中的值。尝试增加此参数以增加内核交换内存页面的积极程度。请参阅人进程

   /proc/sys/vm/swappiness
          The value in this file controls how aggressively the kernel
          will swap memory pages.  Higher values increase
          aggressiveness, lower values decrease aggressiveness.  The
          default value is 60.
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。我永远不会明白这一点,因为我的眼睛里充满了对 gdb 的愤怒的泪水。 (2认同)