Visual C++ 2017 デバッガーの使い方
瀬田学舎の実習室にインストールされたVisual Studio 2017 のデバッガーの基本的な使い方を説明します.
コンパイル成功, 実行できるけど, 期待した動作と異なるとき
プログラムを作成したら, コンパイルエラーはなくなったけど, 実行してみたら, 期待していた動作をしない, またはエラーダイアログが出て異常終了する, という状況に陥ったとしましょう. そんなときがデバッガの出番です.
scanf などの入力の上に黄色矢印がある状態で, ステップオーバーすると, 黄色い矢印が消えます. この状態は, scanf が実行されて, 入力を待っている状態です. ターミナルウィンドウから何か入力すると, 再び次の行に黄色矢印が現れます.
アイコン | 機能名 | 機能 |
---|---|---|
▶続行 | 続行 | 次のブレークポイントまで進む. |
↓ | ステップイン | ソースファイル上で処理の流れにしたがって1行進む. 関数なら, 関数の中に進む. |
↷ | ステップオーバー | ソースファイル上で流れにしたがって1行進む. 関数なら, 関数を1行と見なす. |
↑ | ステップアウト | 実行中の関数を終了して, 呼び出し側に制御を戻す. |
→ | 戻る | 実行中の行を再表示する. |
■ | 終了 | デバッグを終了する. |
|| | 停止 | プログラムの実行を中断してデバッグを開始する. |
- 変数がある条件を満たすようになったときのみ停止するブレークポイントとか, いろんな超絶技巧があります. 試してみてね.
変数の値を調べるには
停止した状態で変数の値を調べましょう.
- 変数の値の表示
- 何がおかしいかは, その付近の変数の値を調べてみるとわかるかもしれません. 値を知りたい変数の上にマウスカーソルを持っていきましょう. 値が表示されます. ただし, これは, 黄色の矢印が指している行の1行前まで実行された時点での値です. マウスカーソルが指す行を実行していたときの値ではありません.
- 変数の値を常時表示
- , などを 利用します. 自動変数のエリアで右クリックして, 表示する変数を追加できます.
- 配列変数の値の表示
- 配列変数にマウスカーソルをあわせると, アドレス(ポインタとしての値)が表示されます. 配列の中身の値を知りたいときには, , などを 利用し, 左端の三角形のアイコンをクリックして展開し, 配列の中身の値を表示させます.
- ウィンドウ上部にあるプルダウンメニューが, でなく となっていることを確かめてビルドします.
- して, 警告ウィンドウが出て停止するのを待ちます.
- ソースの左側の黄色の矢印がでている行が原因で, 警告されていることがわかります(ウィンドウ内にも説明が書かれています).
- 上に書いてある方法を利用したりして, 変数の値が異常でないか調べてみたりしましょう.
- で実行したときには, プログラムが終了すると同時にウィンドウが閉じてしまうことに注意. 必要なら, いちばん最後に, (上で説明する)ブレークポイント設定しておいてね.
- ウィンドウ上部にあるプルダウンメニューが, でなく となっていることを確かめてビルドします
- 無限ループにはいったと思われる状態になったら, を選びます.
- このときソースの左側の黄色の矢印がでているのが, その時点で実行していた行です. この行が無限ループの内側にある可能性が高いでしょう.
- 上に書いてある方法を利用したりして, 変数の値が異常でないか調べてみたりしましょう.
実行すると警告ウィンドウがでるとき
これって, Linux でいうと segmentation fault などに相当する場合が多いです. FAQを参照.
実行するとプログラムが黙ってしまうとき
無限ループに陥っているのかもしれません.