デバッガの利用 〜トレースから変数のウォッチまで〜

デバッガとは

デバッガは、プログラムのデバッグを支援するプログラムであり、作成したプログラムの動作を一時的に停止させて、変数やレジスタの値を確認したり、1行づつ実行させながら処理の流れを確認することができる。 デバッガを利用してプログラムの挙動を把握することは、言語処理系を理解するうえで大きな助けとなる。ここでは、デバッガ活用の基礎として、プログラムのトレース実行の方法を学ぶ。

●今回の演習で使用するプログラムは、P:\学部授業関連\2014年度前期\プログラミング演習I\debuggerに置いてあるので、ホームドライブ上の任意の位置に、フォルダごとコピーして使用すること。

※注意)コピーしたファイルをVisual C++で開く際には、かならずZドライブからのパスで開くことマイコンピュータからのパスでプロジェクトを開くと、デバッガが動作しない。

primeプログラム

primeプログラムは、100個の素数を求めるプログラムである。debugger\prime フォルダのソリューションファイル prime.sln をVisual C++ 開発環境で開く。([ファイル]メニューの[開く->[プロジェクト/ソリューション]から prime.sln を指定するか、エクスプローラから prime.sln をダブルクリックする。)

primeプログラムのソースコードを以下に示す。

 

●ソリューションをロードしたのち、ビルド・実行を行い、以下の実行結果が得られることを確認する。

     2     3     5     7    11    13    17    19    23    29
    31    37    41    43    47    53    59    61    67    71
    73    79    83    89    97   101   103   107   109   113
   127   131   137   139   149   151   157   163   167   173
   179   181   191   193   197   199   211   223   227   229
   233   239   241   251   257   263   269   271   277   281
   283   293   307   311   313   317   331   337   347   349
   353   359   367   373   379   383   389   397   401   409
   419   421   431   433   439   443   449   457   461   463
   467   479   487   491   499   503   509   521   523   541
続行するには何かキーを押してください . . .

プログラムのトレース

ブレークポイントの設定

デバッガ上でプログラム実行時に、一時的にプログラムの停止を行う点をブレークポイントと呼ぶ。

ブレークポイントの設定は,テキストエディタの左端にあるグレーの部分をクリックすることで行う.ブレークポイントは赤丸で表示され,クリックを繰り返すと設定/解除ができる.

 

<

●ソースコードの任意の場所に、ブレークポイントの挿入・解除を試す.
確認できたら、ソースコードの15行目にブレークポイントを設定する。

デバッガ上でのプログラムの実行

ブレークポイントの設定が終了したら、[デバッグ]メニューから[デバッグの開始] をクリックして、プログラムの実行を行う。([F5]キーでも、同様の動作をする。)

上記の操作を行うと、プログラムがロードされ、ブレークポイントが設定された行を実行する直前の状態で停止する。ソースコードエディタ上では、次に実行される行が黄色い矢印で示される。

デバッグを中止するには、[デバッグ]メニューから、[デバッグの停止]をクリックする。

● デバッガ上でプログラムを実行し、矢印が表示されることを確認する。また、デバッグの停止ができることを確認する。

プログラムのトレース

デバッグが開始されると、以下の[デバッグ]ツールバーが表示される。

プログラムが停止した状態からは、[デバッグ]ツールバーのステップ実行ボタンで一行ずつ実行を進めることができる。以下にデバッグツールバーと、 各ボタンの動作を示す

 

 

変数ウインドウ

デバッグが開始されると、以下のようなローカル変数ウインドウが表示される。(デフォルトでは、メインウインドウの左下部にドッキングされて表示される。) 変数ウインドウでは、現在の変数の 値を確認することができる。

 

([ローカル]ウインドウでは、実行している行のスコープ内にある変数の値を確認することができる。[自動変数]では、使用された変数から順に表示されるので、ローカル変数の数が多いときに利用するとよい。)

変数ウインドウでは、変更のあった変数の値は赤色で表示されるようになっている。

● 実際にステップ実行を行い、各ボタンの動作を確認せよ。また、実行を進めるごとに[変数]ウインドウ内の変数の値が変化することを確かめよ。

ウォッチウインドウと式の評価

ウォッチウインドウでは、名前フィールドに任意の変数や式を入力して、その値がどのように評価されるかを調べることができる。(デフォルトでは、メインウインドウ右下部に表示される。)

● 以下の式がどのように評価されるかまず考えてみてください。次に、ウォッチウインドウの名前フィールドに以下の文字列を入力して、評価結果を確認しなさい。

その他、どのように評価されるのか疑問に思った式を入力して試してみること。デバッガ上では、即座に評価結果が出るので効率がよい。また今後、配列やポインタ、構造体などの式表現を学んだ時には、デバッガ上で評価してどのようになるのかを確認するのが理解の早道です。

※ これらのウインドウが表示されていない場合には,[デバッグ]メニューの[ウインドウ]メニューから対応するウインドウを選んで開くことができる.

 

sizeof 演算子
型や、変数の大きさ(メモリ上でのバイト数)を返す。その値は実行時ではなく、コンパイル時に定数となることを覚えておくこと。

キャスト
(double)2/3 のように、式の前に、型名にカッコをつけたものを書くと、式をその型の値に変換したものを返す。これをキャストという。

2/3 では、整数/整数 が実行され、式の値の型も整数となる。(double)2/3 では、2が実数にキャストされ、実数/整数の演算が行われる。式の値も実数型となる。