2012-05-17 32 views
1

1)我的守护进程有问题。它没有核心愚蠢的一代时间崩溃的时间。系统是FreeBSD。总是生成.core之前。似乎这是一些其他类型的错误或其他事情发生,并退出没有核心。无论如何,我想知道这一点,并修复!cpp没有内核和gdb的gdb崩溃附加到工作进程

2)如何检查freebsd该核心必须100%确定生成? 这里:How to generate a core dump in Linux when a process gets a segmentation fault?ulimit -c unlimitedCommand not found

3)似乎捕获错误/崩溃我需要重视与GDB的过程?怎么做?还搜索到的计算器,并成立: gdb attach to a process without stop,但我注意到肯定,我做的所有权利:

一)我创建一个名为attach文件给他的权限来执行,并添加此行:

echo "cont" > attach.gdb 
gdb server $1 -x attach.gdb 
rm attach.gdb 

b )像./attach 运行,并开始,但我什么都不能做。这是正确的?我需要等待守护进程会崩溃,并写入generate-core-file才能获得核心?

4)如果守护进程退出时没有SEGFAIL或其他异常,将由命令generate-core-file生成核心?

感谢和抱歉我的英语。很难写出一些非母语的大信息。你必须明白......

回答

1

3B),你需要运行./attach 1234其中1234是正在运行的进程的PID(即PID将是$1参数的脚本,它会传递给GDB)

或者只是不打扰附加脚本(这是非常毫无意义的),然后运行gdb server 1234,然后键入命令cont并等待它崩溃。

如果gdb连接到它时崩溃,为什么你需要一个核心文件?核心文件的好处是使用调试器来检查它,但是如果它在调试器内部崩溃,那么只需直接调试它,则不需要核心文件!因此,忘记generate-core-file以及它何时崩溃直接检查该进程。

+0

谢谢,但它总是有用的.core文件,因为我无法监控守护进程在gdb下整天。并且你知道“爸爸的事情发生在你不指望他们的时候”,并且在最不合时宜的时刻 – abrahab

+1

你不需要监控它,你可以让它保持运行,但是它在gdb下运行得更慢,并且如果有信号被提出。我只回答3和4关于使用gdb。要找出为什么没有核心文件找出守护进程退出时的退出状态(可能通过从脚本运行并在退出后打印$?)并找出为什么没有核心文件(也许它运行从没有权限写入文件的目录) –

+0

您可以添加如何获取退出状态的分步说明吗?一些像我的问题一样使用./server |创建shell文件echo $> status.file? PS。不,它的写法后来在SIGFAIL上。) – abrahab

1

如果过程没有因为一个问题的ulimit不是核心,写一个小shell脚本,运行你的过程之前设置的ulimit:

#! /bin/sh 
ulimit -c unlimited 
/path/to/my/program > program.out 2>&1 
echo $? >> program.out 

这可以让你捕捉你的程序输出和错误,以及捕获程序返回状态到program.out。如果它填满了它所在的文件系统,那么你将不得不观察这个文件的大小,这可能导致其他不好的情况。

这不是一个给定的,这就是为什么你没有得到一个核心,但。如果你的程序是为了调试而编译的,并且敲了一个assert(),它将会退出而不取消核心。您的程序在退出前是否打印任何内容或记录任何内容?

+0

freebsd:ulimit:找不到命令。 – abrahab