異常終了とデバッグ | Programming Place Plus Visual Studio編

トップページVisual Studio編

この章の概要

この章の概要です。


異常終了

プログラムの実行中に想定外の異常事態が起こると、異常終了というかたちで強制終了される場合があります。C言語や C++ では、abort関数(C言語編リファレンス)が実行された場合にも異常終了となります。また、abort関数は、assertマクロ(C言語編リファレンス)が失敗したときにも呼び出されるため、これが原因で起こることがよくあります。

異常終了が起こると、次のようなダイアログボックスが出現します。

異常終了

3つのボタン【中止】【再試行】【無視】があるので、いずれかを選択します。

【中止】を選ぶと、プログラムの実行がそのまま終了します。

【再試行」を選ぶと、Visual Studio のデバッガが起動して、デバッグ作業を開始できます(このあと説明します)。ただし、デバッグなし実行(「実行する」のページを参照)を選んで実行している場合は、そのまま終了になります。

【無視】を選ぶと、プログラムを続行しようとしますが、そもそも異常終了しようとしている状況なので、これは通常うまくいきません。

デバッグ

【再試行】を選んだ場合、Visual Studio を使ってデバッグ作業を継続できます。

このときまず、次のようなダイアログボックスが現れるかもしれません。

再試行

【継続】を選ぶと、プログラムの実行を続けようとします。ただ、そもそも異常終了しようとする流れの中にある状況なので、【継続】を選ぶと、むしろ終了することになるでしょう。

【中断】を選ぶと、Visual Studio上に次の画面が現れることがあります。

シンボルが読み込まれていません

この画面が現れた場合、異常終了のきっかけになった部分のコードと、その元になったソースコードの関連がわからず、コードを表示できないということです。この写真の場合、ucrtbased.pdb というファイルが必要です。

拡張子 .pdb はプログラムデータベースの略で、必要な情報を集めたファイルです。Windows では、これを指してシンボルと呼ぶことがあります。自身で開発したプログラムの .pdbファイルは、ビルド時に生成されています。

必要なファイルの所在が分かっているなら、「ucrtbased.pdb を参照して探す」を選んで、その在りかを指定します。

ほかの選択肢として、「Microsoft Symbol Servers」のチェックを入れて【読み込み】ボタンを選択することで、シンボルサーバーと呼ばれる場所へネット接続して、ファイルを入手してきます。ここでは必要な情報だけを読むのでそれほど時間は掛かりませんが、次回の実行に、今回読み込まれなかったほかの多くのファイルの読み込みが起こるので、少し待たされることになります(次の写真のような読み込みが行われます)。1度入手してきた情報は、PC上に保存(キャッシュ)されます。

シンボルの読み込み

Visual Studio のメニューバーの【ツール】>【オプション】を選び、【デバッグ】>【シンボル】を開くと、【Microsoft シンボルサーバー】にチェックが入っているはずです。下部にある【次のシンボルを自動的に読み込む】の設定に応じて、自動的な読み込みが起きています。

必要な情報が参照できれば、Visual Studio上でソースコードが表示され、デバッグ作業を行える状態で待機します。関数の呼び出し履歴(「関数の呼び出し履歴」のページを参照)を確認すれば、どこで待機していて、どのような経路でそこまでやってきたのかを確認できます。


参考リンク


更新履歴



Visual Studio編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る