Visual C++ 2017 デバッガーの使い方

Time-stamp: "2019-05-23 Thu 07:27 JST hig"

瀬田学舎の実習室にインストールされたVisual Studio 2017 のデバッガーの基本的な使い方を説明します.

コンパイル成功, 実行できるけど, 期待した動作と異なるとき

プログラムを作成したら, コンパイルエラーはなくなったけど, 実行してみたら, 期待していた動作をしない, またはエラーダイアログが出て異常終了する, という状況に陥ったとしましょう. そんなときがデバッガの出番です.

デバッグビルド
  • ウィンドウ上部にあるプルダウンメニューソリューション構成が, Releaseでなく Debugとなっていることを確かめてビルドします
  • ブレークポイント
    プログラムを一時停止させたい点を設定しましょう. ソース(プログラム)が表示されている部分で, 問題が発生していると思われるよりも十分に前の行(わからなければ main の最初の行)で, 左のグレイエリアで左クリックします. ブレークポイント(赤い丸)が置かれます.
    実行する
    メニューの デバッグ > デバッグの開始を選びます. するとプログラムが開始され, 赤いマークに黄色の矢印が重なって停止します. 黄色の矢印は次に実行される行を表します. (注: デバッグなしで開始でなく ただのデバッグの開始です.
    ブレークポイントの削除
    十分調べて, ブレークポイントが不要になったら, 赤丸上で左クリックで削除できます. (右クリックから ブレークポイントの無効化, つまり位置は記録しておくけど一時的に効力を取り消す, こともできます).
    ステップ実行
    おかしくないようなら, 実行を続けることにしましょう. 実行を続けるには, デバッグメニューの中, またはツールバーにある次のような操作を行います. 基本は, 続行(▶), ステップオーバー(B7;), ステップイン(↓), ステップアウト(↑), 現在のステートメントの表示(→)です. 特に, ステップオーバーを繰り返し使うと, プログラムの実行の実際の流れを知ることができます.

    scanf などの入力の上に黄色矢印がある状態で, ステップオーバーすると, 黄色い矢印が消えます. この状態は, scanf が実行されて, 入力を待っている状態です. ターミナルウィンドウから何か入力すると, 再び次の行に黄色矢印が現れます.

    アイコン機能名機能
    ▶続行続行次のブレークポイントまで進む.
    ステップインソースファイル上で処理の流れにしたがって1行進む. 関数なら, 関数の中に進む.
    ステップオーバーソースファイル上で流れにしたがって1行進む. 関数なら, 関数を1行と見なす.
    ステップアウト実行中の関数を終了して, 呼び出し側に制御を戻す.
    戻る実行中の行を再表示する.
    終了デバッグを終了する.
    ||停止プログラムの実行を中断してデバッグを開始する.
    • 変数がある条件を満たすようになったときのみ停止するブレークポイントとか, いろんな超絶技巧があります. 試してみてね.

    変数の値を調べるには

    停止した状態で変数の値を調べましょう.

    変数の値の表示
    何がおかしいかは, その付近の変数の値を調べてみるとわかるかもしれません. 値を知りたい変数の上にマウスカーソルを持っていきましょう. 値が表示されます. ただし, これは, 黄色の矢印が指している行の1行前まで実行された時点での値です. マウスカーソルが指す行を実行していたときの値ではありません.
    変数の値を常時表示
    デバッグ>ウィンドウ>ローカル, デバッグ>ウィンドウ>自動変数などを 利用します. 自動変数のエリアで右クリックして, 表示する変数を追加できます.
    配列変数の値の表示
    配列変数にマウスカーソルをあわせると, アドレス(ポインタとしての値)が表示されます. 配列の中身の値を知りたいときには, デバッグ>ウィンドウ>ローカル, デバッグ>ウィンドウ>自動変数などを 利用し, 左端の三角形のアイコンをクリックして展開し, 配列の中身の値を表示させます.

    実行すると警告ウィンドウがでるとき

    これって, Linux でいうと segmentation fault などに相当する場合が多いです. FAQを参照.

    1. ウィンドウ上部にあるプルダウンメニューが, Releaseでなく Debugとなっていることを確かめてビルドします.
    2. デバッグ > デバッグの開始して, 警告ウィンドウが出て停止するのを待ちます.
    3. ソースの左側の黄色の矢印がでている行が原因で, 警告されていることがわかります(ウィンドウ内にも説明が書かれています).
    4. 上に書いてある方法を利用したりして, 変数の値が異常でないか調べてみたりしましょう.
    5. デバッグ > デバッグ開始で実行したときには, プログラムが終了すると同時にウィンドウが閉じてしまうことに注意. 必要なら, いちばん最後に, (上で説明する)ブレークポイント設定しておいてね.

    実行するとプログラムが黙ってしまうとき

    無限ループに陥っているのかもしれません.

    1. ウィンドウ上部にあるプルダウンメニューが, Releaseでなく Debugとなっていることを確かめてビルドします
    2. デバッグ > デバッグの開始
    3. 無限ループにはいったと思われる状態になったら, デバッグ>すべて中断を選びます.
    4. このときソースの左側の黄色の矢印がでているのが, その時点で実行していた行です. この行が無限ループの内側にある可能性が高いでしょう.
    5. 上に書いてある方法を利用したりして, 変数の値が異常でないか調べてみたりしましょう.

    このサイトのコンテンツ

    QRcode to hig3.net

    https://hig3.net