Sunday, 25 April 2010

ソース読み会だったはずが、デバッグ会に

まぁ、良くあるパターン。12月あたりにCeriumをガンガンなおしまくって、embug してたのは知っていたんだけど。例題を動かしていくうちに、「ここ、おかしい。じゃぁ、デバッグ」ってな感じで...

1行のバグを見つけるのに4時間ぐらいかかりました。コードをコピペした時に一ヶ所 in を out に書き換えるのを忘れたらしい。「ここは大丈夫だろう」とか偏見持っちゃうとだめだね。

gdb の使い方が良くわかって学生には良かったんじゃないかと。Cell は特に癖があるので...
 set spu stop-on-load
とか、new のtraceは、一旦、malloc まで入らないと動作が変とか。
 cont 999
で、バグが出るまでのbreak point通過数を見て、ingore で、その直前で止めるとか。
 watch ((Hoge*)0x23423)->fuga
見たいに特定アドレスを監視するとか。hardware watch point でないと遅いとか。

 if (a) f();
 if (b) g();

みたいな単純なものでも、aとbが両方成立する時だけ動かないとかだと、Test を書くのはあまり自明にならない。Coverage は、こう言う時には無力だし。状態数え上げは、まだ、コスト高いしね。

 if (a & b) fg();
 else if (a & !b) f();
 else if (!a & b) g();
 else if (!a & !b) ;

に書き直すなんてのを思い付きますが、まぁ、ないでしょう。

とは言え、一応、Word count も性能向上したようなので良かったです。(でも、なんで、僕が書いた版を直さないんだよ...) もっとも、APIが複雑になっちゃたので、使えない感じ。まぁ、それは新しい版でも作るんだろうな。

並行して、UMLも書いてもらえば良かったが、まぁ、難しいな。

と言うのを、iPhone 上のmixi公認アプリから出そうと思ったら、既に動かなくなってました。ひどい。

No comments: