2016/11/08

[c++]catch(...)の「...」は取ってこられないみたい

駅前が陥没して通勤路をどう迂回するか検討中だけど、まあよかろう(よくはない)。

 

pythonで作ったデータをパースしてくれるアプリがいて、そのアプリはC++で書かれている。
データが正しいかどうかはそこそこ判定してくれているのだけど、だんだん複雑なプロトコルを作ることができるようになったためか、とうとう「unknown error」というどうしようもないメッセージしか出してくれなくなった。。。
やむなく、アプリにprintfログを埋め込んで、どこが悪そうなのか当たりを付けることにした。

そうすると、どうやら例外が発生しているようだった。
そして、それはcatch(...)で捕捉していて、その場合に「unknown error」としているようだった。
ちっ。

 

さて、このcatch(...)。
関数の引数であれば、va_argsなどで取ってくることができるけれども、例外はどうなんだろうか?

調べた範囲では、取ってくることはできなさそうだった。
『プログラミング言語C++第3版』の§14.6.3.2に書いてありそうな雰囲気だったのだが、そういう感じではない。
今回のアプリは、どうやら標準例外を使ってくれているようで、別途catchを追加してエラー出力を追加するようにした。

しかしまあ、オープンソースで公開されているアプリとはいえ、規模が大きくてデバッガも使えないような状況だと、例外だけでもソース解析がつらいですな。
例外を投げるしくみにするときは、例外用クラスをぽこぽこ作るのではなく、標準例外を継承して作るようにした方がよいのだろう、たぶん。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。