linux上的异常处理程序

时间:2012-02-05 21:19:58

标签: segmentation-fault

我正在尝试让我的应用程序在出现一些错误(分段错误)时进行保存。

我已经有了适用于Windows的代码,但我无法在Linux上运行它。

Windows版本:

EXCEPTION_DISPOSITION __cdecl _SEHHandler(struct _EXCEPTION_RECORD *ExceptionRecord, void* EstablisherFrame, struct _CONTEXT *ContextRecord, void* DispatcherContext)
{
    save();
}

EXCEPTION_DISPOSITION __cdecl _SEHHandler(struct _EXCEPTION_RECORD *ExceptionRecord, void* EstablisherFrame, struct _CONTEXT *ContextRecord, void* DispatcherContext) { save(); }

1 个答案:

答案 0 :(得分:0)

尝试保存有关分段违规的数据并不总是一个好主意,因为您保存的数据可能已损坏或保存可能会再次触发分段违规。但是你需要发出信号并采取行动。

#include  <stdio.h>
#include  <signal.h>

void crashHandler( int sig ) {

   // do save
}

// install handlers
signal(SIGBUS, crashHandler); 
signal(SIGSEGV, crashHandler); 

有关详情:http://www.alexonlinux.com/signal-handling-in-linux