Visual C++ 2008 デバッガーの使い方
Time-stamp: "2014-05-20 Tue 07:12 JST hig"
瀬田学舎の実習室にインストールされたVisual Studio 2008 に含まれる Visual C++ 2008 のデバッガーを使うときの基本的な使い方を説明します.
プログラムを作成したら,
エラーがでなくなってコンパイルできるようになったけど,
実行してみたら, 期待していた動作をしない, という状況に陥ったとしましょう.
そんなときがデバッガの出番です.
とりあえず実行されるけど, 期待した動作と異なるとき
- ウィンドウ上部にあるプルダウンメニューが,
でなく
となっていることを確かめてビルドします
-
ブレークポイント
すなわち, プログラムを一時停止させたい点を設定しましょう.
ソース(プログラム)が表示されている部分で,
問題が発生していると思われるよりも十分に前の行(わからなければ main の最初の行)で右クリックし, ブレークポイントの挿入を選びます(実は, 左の余白で左クリックするだけでもいけます).
すると,
左側に赤い丸がつきます.
-
実行する.
メニューの デバッグ > デバッグ開始を選びます.
するとプログラムが開始され,
赤いマークに黄色の矢印が重なって停止します.
黄色の矢印は次に実行される行を表します.
(注:
でなく
ただのです.
ただのの場合, プログラムが正常に終了するとすぐにウィンドウが閉じてしまいます. これが, エクスプローラから普通に実行したときの振る舞いなのです. 必要なら, プログラムが結果を出力した後, 終了する直前, 典型的には main 関数の return 文にブレークポイントを設定しておきましょう.
-
ブレークポイントの削除
十分調べて, ブレークポイントが不要になったら,
その行で右クリックメニューからブレークポイントの解除を選びます
(実は, 赤丸上で左クリックでもいけます).
ブレークポイントの無効化とは一時的に効力を取り消すことです.
-
ステップ実行
おかしくないようなら, 実行を続けることにしましょう.
実行を続けるには, デバッグメニューの中に, 次のような選択肢があります.
基本は 続行, ステップイン, ステップオーバー, ステップアウトです.
特に, ステップオーバーを繰り返し使うと, プログラムの実行の実際の流れを知ることができます. ツールバーにアイコンがあります.
続行 | 次のブレークポイントまで進む. |
ステップイン | プログラムファイル上で処理の流れにしたがって1行進む. 関数なら, 関数の中に進む. |
ステップオーバー | プログラムファイル上で流れにしたがって1行進む. 関数なら, 関数を1行と見なす. |
ステップアウト | 実行中の関数を終了して, 呼び出し側に制御を戻す. |
scanf などの入力の上に黄色矢印がある状態で, ステップオーバーすると,
黄色い矢印が消えます. この状態は, scanf が実行されて,
入力を待っている状態です. ターミナルウィンドウから何か入力すると,
再び次の行に黄色矢印が現れます.
-
進んだ使い方
変数がある条件を満たすようになったときのみ停止するブレークポイントとか,
いろんな超絶技巧があります. 試してみてね.
-
デバッグするプログラムに, コマンドライン引数を与えたい場合があります.
それは,
のコマンド引数で設定できます.
別のページ参照.
変数の値を調べるには
停止した状態で変数の値を調べましょう.
-
変数の値の表示
何がおかしいかは, その付近の変数の値を調べてみるとわかるかもしれません.
値を知りたい変数の上にマウスカーソルを持っていきましょう.
値が表示されます.
ただし, これは, 黄色の矢印が指している行の1行前まで実行された時点での値です.
マウスカーソルが指す行を実行していたときの値ではありません.
-
変数の値を常時表示するには
,
などを
利用します.
-
配列変数の値の表示
配列変数にマウスカーソルをあわせると, アドレス(ポインタとしての値)が表示されます. 配列の中身の値を知りたいときには,
,
などを
利用します.
実行すると警告ウィンドウがでるとき
これって, Linux でいうと segmentation fault などに相当する場合が多いです.
FAQを参照.
- ウィンドウ上部にあるプルダウンメニューが,
でなく
となっていることを確かめてビルドします.
- (でなく)
-
警告ウィンドウは, ソースの左側の黄色の矢印がでている行が原因ででていることがわかります.
-
上に書いてある方法を利用したりして, 変数の値が異常でないか調べてみたりしましょう.
-
で実行したときには,
プログラムが終了すると同時にウィンドウが閉じてしまうことに注意.
必要なら, いちばん最後に, (上で説明する)ブレークポイント設定しておいてね.
実行するとプログラムが黙ってしまうとき
無限ループに陥っているのかもしれません.
- ウィンドウ上部にあるプルダウンメニューが,
でなく
となっていることを確かめてビルドします
- (でなく)
-
無限ループにはいったと思われる状態になったら,
を選びます.
-
ソースの左側の黄色の矢印がでているのが,
その時点で実行していた行です.
この行が無限ループの内側にある可能性が高いでしょう.
- 上に書いてある方法を利用したりして, 変数の値が異常でないか調べてみたりしましょう.
追加資料
Copyright © 2010-2014 Saburo Higuchi. All rights reserved.
樋口三郎,
http://www.math.ryukoku.ac.jp/~hig/