簡単なデバッグ手法:スナップショット

 

プログラムは思うようには動かない。書かれているとおりに動く。
という名言があります。

毎度、管理人イガジーです。

プログラムを書いて、実行させたら完璧に動いた。完了。
なんていう事はきわめてマレです。
たいていは、「あれ?」「どうした?」と思うようには動きません。
そこで、デバッグという作業をすることになります。
デバッグ(虫取り)とは、意図しない動作の原因を調べ修正する
という作業です。

Eclipseには、ブレイクポイント設定やステップ動作、変数ウォッチ
などの強力なデバッグ機能がありますが、
ざっと確認したいような場合は、ソースコードにprintfを埋め込んで
それを眺めるという手法があります。俗にスナップショットと呼びます。

埋め込んだprintfのメッセージで、そこを通過した事が分かります。
また、その時の変数を表示させて、終了判定や境界判定が
正しいか、も確認することができます。

例えば、Listenerを作っても、それが動作していない気がする時は
その中にSystem.out.printf(“xxxListener\n”); などを埋め込んで
表示されるかどうかを見ます。
表示されなかったら、「あぁ、addListennerしてなかった…orz.」
などと気がついたりします。

Canvasへの描画しているつもりなのに、表示されない場合も
描画処理のあとにSystem.out.println(“Draw %s\n”,str); などを
埋め込んでみます。
strの内容が、それなりに表示されて(null や “”ではなかった)
「あぁ、repaint() してなかった…orz」と気がついたりもします。

※ 上記2例は、最近のイガジー自身の実例です。

スナップショットは、Java以外の言語でも使える汎用的な手法です。
ソースを眺めて唸るより、実際に動かしながら確認するのが早道です。
恥ずかしがらずに、やってみましょう。

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)