ループ内でメモリをゼロにする 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 のデータにアクセスする方法や「キャッチャー」を使用する方法は?