Cocos2d-xでエラーハンドリングしたら元のエラーが出力されない?

今回はCocos2d-x(c++)に関するエラーハンドリングに関する初心者向け情報です。

自分で実装したtry-catch文のせいでコンソールに出力されてた内容が変わってしまったことありませんか?(エラー理由が変わってしまう)

try {
  ...
  std::map testmap;
  testmap.at("hoge");
  ...
}
catch(std::exception e)
{
  // ここでログに出力とか
  log("%s", "XXXの箇所で例外が発生しました");
  throw e;
}

catch文なければ以下のように出力されるんで原因つかみやすいケースもあるかと。
libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: map::at: key not found

でもこれが出なくなるんですね。

そんな時、以下のように書くといけます。

catch(std::exception e)
{
  std::rethrow_exception(std::current_exception());
}

これで元の出力どおりになったと思います。

Cocos2d使いが減ってる昨今、ますます肩身が狭くなってると感じる今日この頃。(´ω`)

世間はスウィフターで溢れてますね。

c++やだc#がいい→Unityに流れる。
やっぱ時代はSwiftっしょ→Native開発に流れる。

みんな取捨選択が早くてうらやましいです。

この記事を見たみなさんもきっとCocos2d使いのはず。
逆境に負けず、共にがんばっていきましょう。

コメントを残す

メールアドレスが公開されることはありません。