21

所以我在 GDB 中启动了我的 c++ 应用程序,当它退出时,我基本上得到:

[Thread 0x7fff76e07700 (LWP 6170) exited]
[Thread 0x7fff76f08700 (LWP 6169) exited]
[Thread 0x7fff77009700 (LWP 6168) exited] 
...
Program terminated with signal SIGKILL, Killed. The program no longer exists.
(gdb)

我真的不知道为什么会发生这种情况,为什么我不能回溯看看它是如何退出的?有人有想法么?它永远不应该结束:(

谢谢!

4

4 回答 4

29

我真的不知道为什么会发生这种情况,

这通常意味着

  • 其他一些进程执行了 a kill -9 <your-pid>,或
  • 内核OOM杀手认为您的进程消耗了太多资源,并终止了它(实际上是内核kill -9为其执行)。您应该查看/var/log/messages/var/log/syslog在 Ubuntu 变体上)以寻找其痕迹——内核通常在 OOM 某个进程时记录一条消息。

为什么我不能回溯看看它是如何退出的?

因为要查看回溯,流程必须存在。如果它不存在,则它没有堆栈,因此不能有回溯。

于 2012-09-06T03:22:37.013 回答
2

如果您使用的是 Unix/Linux,您还应该能够dmesg在终端上键入并查看进程终止的原因。就我而言,确实是OOM。这是终止后不久我的内核日志的屏幕截图

于 2020-05-28T08:30:37.980 回答
1

进程可能遇到了 cpu time ulimit。如果“cpu time”设置为“unlimited”以外的任何值,请从进程实际启动的环境中检查ulimit -a

于 2014-03-19T17:57:35.773 回答
0

在我的情况下是崩溃(AV)。即使附加了 GDB,我也无法捕捉到这种违规行为。
希望能帮助到你

于 2013-01-11T15:07:42.230 回答