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のシグナルを受け取って処理することが出来ます。