NEUROMANTIC

自分でC/C++/UE4/Graphics/ゲームなどをやったことをメモするブログ

Windows+VS環境でabort()をハンドルする方法

やり方

Windowsでのabort()は基本的にはSIGABRTというシグナルを出します。 -NIX系列のOSではsigactionなどの関数でシグナルをハンドリングすることが出来ますが、Windowsのデバッグ環境で呼び出されるabort()から出るシグナルをハンドリングは以下のようなコールバックを指定することで出来ます。

void __SignalHandler(int signal)  
{  
  if (signal == SIGABRT) { exit(3); }
}

そしてこの関数を以下のコードとして指定します。

typedef void (*SignalHandlerPointer)(int);  
SignalHandlerPointer previousHandler = signal(SIGABRT, __SignalHandler); 

コールバック関数の引数であるsignalはインタラプトされた信号の番号を渡します。上記のコードではSIGABRTしか処理しませんでしたが、参考にあるリンク先であらゆるWindowsのシグナルを受け取って処理することが出来ます。

参考

docs.microsoft.com

docs.microsoft.com