多くのエラー形式では,デバッガーを使ってエラーの原因を特定することができます。この節では,以下のトピックについて説明しています。
デバッガーが適切なエラー状態を特定できるようなコンパイラ・オプションを使ってプログラムのコンパイルを行わなければならないことに注意してください。
/check:keyword オプションは,実行時に特定の状態を特定するための追加コードを生成します。たとえば,「Array and Substring Bounds」検証 (/check:bounds) を指定しないと,デバッガーは配列または文字列の境界エラーを特定せず,実行を停止しません。
/fpe:3 コンパイラ・オプションを指定すると,この設定では IEEE 例外値が許容され,プログラムが続行されるので,一部の浮動小数点例外が特定されなくなります。これとは逆に,/fpe:0 コンパイラ・オプションを指定すると,例外値 (たとえば NaN) が生成された時,または,初期化されていない値を使用した時,実行が停止されます。これにより,エラーの原因を突き止めることができます。
多くの場合,プログラムは例外が発生した点で自動的に停止し,ソース・コードと変数値を表示することができるようになります。エラーが I/O 文に関連している場合は,「Call Stack の表示と Context メニューの使用」を参照してください。
例外の特定の型が発生した時,常にプログラムを停止するように要求することができます。特定の例外は,基本設定として Visual Fortran 実行時ライブラリーで捕えられ,実行時ライブラリー・コード中でプログラムが停止します。多くの場合,自分のプログラムのソース・コード中でプログラムを停止させたいはずです。
デバッガーで例外の処理方法を変える方法
デバッガーを起動し,初期ブレークポイントで実行を停止します。
「Debug」メニューで「Exceptions」をクリックします。
表示された例外を読みます。
変更したい例外の型を選択し,それを「Stop if not handled」から「Stop Always」に変更します。
「Debug」メニューで「Go」をクリックし,プログラムの実行を続行します。
例外が発生すると,実行されたソース行を読み,現在の変数値を検証し,次の命令を実行するなどの動作を行って,プログラムのその部分をよりよく検証することができるようになります。エラーが I/O 文に関連している場合は,「Call Stack の表示と Context メニューの使用」を参照してください。
エラーの場所を特定し,プログラムを修正した後,プログラムを再度デバッグする前に,例外の型を「Stop if not handled」にリセットするかどうかを考慮する必要があります。
以下の項目の両方が設定されていれば,機械語例外に対して,それらはビジュアル開発環境外で実行されているので,プログラムのデバッグに Just-In-Time デバッグ機能を使用することができます。
「Tools」メニューから「Options」項目を選択します。表示される「Options」ダイアログボックスで「Debug」タブをクリックします。「Just-in-time debugging」のチェックボックスにチェック印がある。
FOR_IGNORE_EXCEPTIONS 環境変数が TRUE に設定されている。
Call Stack の表示と Context メニューの使用
プログラムのルーチンの階層構造のどこが現在実行されているのかを表示するには,例外が発生した点でプログラムを停止した後,デバッガーで「Call Stack」ウィンドウと「Context」メニューを表示します。
デバッガーを起動し,ブレークポイントで停止させます。
「View」メニューの「Debug Windows」をクリックします。
サブメニューで「Call Stack」をクリックします。
プログラムをデバッガー中で実行しているときに,重大な処理できない I/O プログラミング・エラー (ファイル終了条件など) が発生することがあります。この場合,Fortran 実行システムはデバッグ・イベントを提起して,プログラムの実行を自動的に停止するので,「Call Stack」を表示させることができます。
デバッガー中で,重大な処理できない I/O エラーが発生すると,次の処理が行われます。
次のメッセージを含む情報ボックスが表示されます。
User breakpoint called from code at 0xnnnnnnn
NTDLL 逆アセンブル・コードを表示するウィンドウが表示されます。
「OK」をクリックすると,情報ボックスが消えます。
「Call Stack」の内容を検証すると,NTDLL と Fortran 実行システムの数画面の後に,エラーを引き起こした I/O 文を含んでいる実際の Fortran ルーチンが表示されているはずです。「Context」メニューの「Fortran routine」を選択して,Fortran コードを表示させます。緑色の矢印が,エラーを引き起こした I/O 文を指しています。
「Context」メニュー (「Context:」の後) を使うと,I/O 文を実行したソース・コード行の場所を特定することができます。「Context」メニューは,「Variables」ウィンドウの上部に表示されます (「Squares サンプル・プログラムのデバッグ」を参照)。「Context」メニューを使って,ルーチンを表示するためのコンテキストを選択してください (右側の矢印を使うと選択項目が表示されます)。
この動作は,いずれもエラー・メッセージとトレースバック情報が表示された後に起こります。エラー・メッセージとトレースバック情報はアウトプット・ペインに表示されます。アウトプット・ペインを表示するには,ビジュアル開発環境をアイコン化 (最小化) するか,タスクバーでアウトプット・ペインのアイコンをクリックします。ビジュアル開発環境には「Call Stack」ウィンドウがあるので,スタック・ダンプを行う必要はありませんが,ファイル名を含んだエラー・メッセージは役に立ちます。
関連情報
例外の場所を特定する方法と必要なコンパイラ・オプションについては,「実行時エラーの場所を特定する方法」を参照してください。
トレースバック情報を使用する方法については,「トレースバック情報の使用」を参照してください。