何があった
VisualStudioでC++プログラム書いて出来上がったバイナリをダブルクリックで叩いたらR6010でabortして何のヒントも残さずに死んだ。開発環境上では元気に動いていたのに…。
原因は
- ファイルオープンで失敗して発生した例外(std::runtime_error)が投げられる
- どこでもキャッチされずに(そりゃそうだ)main関数を抜ける
- ランタイムくん「なんかよくわかんないけど問題あったからabort()したよ」
ランタイムくんが「例外が発生したよ」という情報を隠してたんですね…。
どうすりゃいいのか
main()関数でtry-catch文を使ってstd::exceptionをキャッチしてwhat()の返す文字列をcerrなりファイルなりダイアログなりに流してから再throwすれば何が起きたかはわかるようになる。
感想
ランタイムくんのガバガバ情報伝達きらい