我有一些 SSE 程序可以在循环中将内存归零,当指针未对齐时,它会引发 SIGSEGV 进入我的处理程序。我可以在这样的处理程序例程中获得更多信息吗?现在我没有得到它在哪里完成的信息,我也可以以某种可预测的方式做出反应吗?当我选择忽略它时,在我看来,它应该返回,因为它在循环中再次引发 SIGSEGV,(当我忽略它时,这种行为被零除,它只会继续下去)但它在这里不起作用这种方式,但遗憾的是在忽略后就崩溃了。我可以在这里做一些更精致的恢复吗?
编辑 - 添加
在我的 signal.h 中(一些非常旧的 win32 编译器,但我使用它)我有这样的东西
/* _SIGCONTEXT contains exception info for WIN32 exceptions that were caught
and turned into signals. There will always be three 32-bit parameters
passed to the user's signal handler. Unused parameters will be 0. The
_PSIGCONTEXT parameter will always be the last (third) parameter.
*/
typedef struct
{
struct _EXCEPTION_RECORD * _pexecptionrecord; /* defined in WINNT.H */
struct _CONTEXT * _pcontext; /* defined in WINNT.H */
unsigned long _result; /* return value for the SEH */
} _SIGCONTEXT, *_PSIGCONTEXT;
typedef int sig_atomic_t; /* Atomic entity type (ANSI) */
typedef void (*_CatcherPTR)(int);
#define SIG_DFL ((_CatcherPTR)0) /* Default action */
#define SIG_IGN ((_CatcherPTR)1) /* Ignore action */
#define SIG_ERR ((_CatcherPTR)-1) /* Error return */
//////////////////////////////////
//skipped #define SIGABRT 22
// #define SIGFPE 8 .... constants block here
int raise(int __sig);
void (*signal(int __sig, void (*__func)(int) )) (int);
我理解 Signal Raise 但如何获取 SIGCONTEXT 的数据或使用 'catcher' ?