所以我在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)
我完全不知道为什么会发生这种情况,为什么我不能做回溯看它是如何退出的呢?有人有主意吗?永远不应该结束:(
谢谢!
答案 0 :(得分:26)
我完全不知道为什么会这样,
这通常意味着
kill -9 <your-pid>
或kill -9
)。您应该查看/var/log/messages
(Ubuntu变体上的/var/log/syslog
)以获取其中的痕迹 - 内核通常会在OOM进行某些过程时记录消息。为什么我不能做回溯看它是如何退出的?
因为要查看回溯,所以该过程必须存在。如果它不存在,则它没有堆栈,因此不能进行回溯。
答案 1 :(得分:1)
进程可能会遇到cpu time ulimit。如果&#34; cpu time&#34;请从实际启动进程的环境中使用 ulimit -a 进行检查。设置为&#34;无限制&#34;
以外的任何内容答案 2 :(得分:1)
如果您使用的是Unix / Linux,则还应该能够在终端上键入dmesg
并查看终止过程的原因。就我而言,确实是OOM。 here is a screenshot of my kernel log shortly after the termination
答案 3 :(得分:0)
在我的情况下是一次崩溃(AV)。即使加上GDB,我也无法发现这种违规行为 希望它有所帮助