Public Notes

  • びふぉー・あふたー

    luabindのdebug.hppのアイディアはけっこう好きなんですけど、デバッガ無いと使いづらかったので、なんか魔改造してみました。
    びふぉー: https://github.com/luabind/luabind/blob/master/luabind/detail/debug.hpp
    あふたー: https://github.com/take-cheeze/langbind/blob/master/nutbind/detail/debug.hpp
    Squirrel用のコードになってるのは割愛して、まず、ただのassertだった場所についてです。
    元のコードは、assertがdebug.hppにそのまま書かれているので、debug.hppにあるassertの位置をアサーションが失敗した時に表示してきます。これでは色々とだめです。事件は会議室で起きてません。なので、stack_checker_typeは肥大化しますが、マクロで取得した行番号、ファイル名、関数名をstack_checker_typeに記録しています。因みに、これは特別なメモリアロケータを使う時によく使われているテクニックを応用です。こうゆう時に役立つんですね。
    次は、エラーメッセージについてですけど、折角比較しているのでやっぱりテストみたいに期待した値と実際の値を表示したいです。また、スタックに積まれているオブジェクトの型も比較しています。原理はstd::vectorにstackの型(enum)を積んで、デストラクタが呼ばれてるいる時に比較してるだけです。書いてて思ったんですけど、こうゆうメッセージの整形ってけっこう大変ですね。(参考画像1: http://twitter.com/#!/take_cheeze/status/139672460713930752/photo/1 , 参考画像2: http://twitter.com/#!/take_cheeze/status/139672323841212416/photo/1
    今回は、あまり経験がなかったデバッグ用のライブラリを書けて面白かったです。assert()だらけのソースコードはやっぱりよくないですね。
Copyright © Textt / GreenSpace