Win32プログラミング講座 〜 Step20. プロセス デバッガによるデバッグに挑戦 〜・プログラミングはしてみたけど、いざ実行すると強制終了してしまう。なんでぇ〜(>_<) ・この変数の値がちゃんとしてるか、MessageBoxでいちいちチェックするのって面倒…
そこのあなた、こんなお悩み抱えていませんか?こんなときに登場するのが「プロセス デバッガ」。デバッグのやり方さえ覚えてしまえば、これらの問題はスマートに解決できます。 そもそも、デバッグって何? 「デバッグ」=「バグを取り除く」などという意味を持ちますが、一般的に、作ったプログラムに不具合はないかを、コードを一つ一つチェックしながら実行したり、任意のタイミングで変数の内容を表示しながら実行するといったことをしてチェックします。
論より証拠、実際にデバッギングを体験してみましょう。
![]()
無限ループで配列要素が大きくなりすぎるという誰でも予想がつくバグを潜ませておきましたが、予想通り出ましたね、「アプリケーション エラー」。Win9x系のOSでは、「不正な処理」がでているのではないでしょうか? では、どう対処するのか
それは、 では、先ほどのおかしなプログラムを開いた状態で、デバッグ実行をしてみましょう。
![]() すると、アクセスエラーを起こした行の位置でプログラムがストップし、プロセスデバッガが情報を伝えてくれます。ご丁寧に、@のようにエラーの行が反転表示され、Aのメッセージが表示されると共に、Bのダイアログボックスが表示されます。 このBの「ブレーク ポイント」ダイアログボックスが以下のようなプログラムの実行状況を伝えてくれます。
・グローバル変数
今回はおかしなプログラムのデバッグということで進めているので、ここに表示されている変数iの値に注目してみます。
という風に、無事、プログラムのアクセス エラーの場所が判明されました。デバッギングはここまで。エラーにならないよう、後に修復を行うのはあなたのお仕事です☆
デバッグコンパイル時のみ有効であり、リリースコンパイル時には無視されるDebug命令語、プログラムをトレース実行するにはもってこいの命令です。ここでも非常に簡単なプログラムでDebug命令語を体験してみましょう。
なんじゃこりゃ!?と思えてしまうようなプログラムですが、主役はDebug命令語です。デバッグ実行をしてみると、すぐさま、「ブレーク ポイント」ダイアログが表示されるはずです。
![]() そしたら、今度は、「ステップ(OVER)」をクリックしてみて下さい。するとすぐに同じダイアログボックスが表示されるわけですが、変数aの値が10に変化しているのにお気づきでしょうか?それと共に、プログラムの実行位置も "a=10" の行になっていますね。 もうなにをしたかはお気づきですね。そうです、一行ずつ実行をしているのです。更に「ステップ(OVER)」をクリックしていくと、aの内容は20、30と変化し、プログラムは無事終了します。 このように、デバッガを利用することで、プログラムを一行ずつ実行して動きをチェックしていくことができます。Debug命令語はプログラム内の様々な場所に何個でも配置することができます。 ところで、ステップ(IN)とステップ(OVER)の違いは? そうそう、忘れないうちに説明しておきましょう。非常に似たような機能ですが、以下のような相違点があります。
・ステップ(IN) … 内部プロシージャ呼び出しの行を実行する場合に、プロシージャ内に入る
一言で言えば、プロシージャ内に入って調べるか、飛び越すかの違いです。プロシージャ呼び出しではない行の場合はどちらも同じです。
デバッグの達人はプログラミングの達人です。積極的にデバッガを利用し、どんなバグに対しても対処できるようになりしたものですね。私ももう少しがんばらねば…
トップへ戻る
|