有关应用程序的信息:
我们有一个应用程序,其中我们使用segmentation_handler函数实现了SIGSEGV的连接。在此分段处理程序中,我们创建一个文件,执行文件写入(如“获得的堆栈框架”),然后使用回溯和符号将所有堆栈跟踪写入同一文件。
问题:我们得到了SIGSEGV(由于创建了日志文件,已确认),但是很遗憾,该文件为空(0kb文件),其中没有信息。 (即使第一个字符串是纯字符串,在文件中也不可用)。
我想了解在什么情况下会发生这种情况,因为如果我们获得堆栈跟踪就可以解决崩溃,但是我们没有它,并且获取它的机制也不起作用:(
void segmentation_handler(int signal_no) {
char buffer[512]; .............
InitLog();//Create a log file
printf("\n*** segmentation fault occured ***\n");
fflush(stdout);
memset(buffer, 0, 512);
size = backtrace (array, 50);
strings = backtrace_symbols (array, size);
sprintf(buffer, "Obtained %d stack frames.\n", size);
Log(buffer);// Write the buffer into the file
for (n = 0; n < size; n++) {
sprintf(buffer, "%s\n", strings[n]); Log(buffer);
}
CloseLog();
}
最佳答案
您的细分处理程序非常幼稚,并且包含多个错误。这是一个简短的 list :
还有其他问题,但这是基础...
我的演讲中有一段视频,介绍如何编写适当的错误处理程序:http://free-electrons.com/pub/video/2008/ols/ols2008-gilad-ben-yossef-fault-handlers.ogg
关于linux - SIGSEGV崩溃,但无法收集回溯,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9222253/