インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス

範囲外エラーの特定とレポート

ポインターチェッカーは、OS X* システムではサポートされていません。

ポインターチェッカーには、エラーのレポート方法を制御できる __chkp_report_control() ライブラリー関数と __chkp_report_option_t 列挙子が含まれています。 関数と列挙子はヘッダーファイル chkp.h で宣言されています。

レポート制御列挙子には、次のいずれかの値を指定します。

列挙値 動作

__CHKP_REPORT_NONE

何もしません。

__CHKP_REPORT_BPT

ブレークポイント割り込みを実行します。この値を指定すると、ポインターチェッカーは範囲外エラーのブレークポイントを出力します。 デバッガーを使用している場合、デバッガーはブレークポイントで停止するため、エラーが発生した場所を特定できます。 次に、デバッガーの機能を使用して、エラーの原因を特定します。

__CHKP_REPORT_LOG

エラーを記録して続行します。コンパイラーは、範囲外のポインターを見つけるとレポートします。

__CHKP_REPORT_TERM

エラーを記録し、プログラムを終了します。コンパイラーは最初の範囲違反のみレポートして、終了します。

__CHKP_REPORT_CALLBACK

ユーザー定義関数を呼び出します。コンパイラーはユーザー定義関数を呼び出して範囲エラーを処理します。

__CHKP_REPORT_TRACEBACK _BPT

範囲外エラーが発生した命令のソースファイルと行番号を含むトレースバックを出力し、ブレークポイント割り込みを実行します。

ルーチン名を含むより詳細なトレースバック情報を取得するには、traceback コンパイラー・オプションを指定します。

__CHKP_REPORT_TRACE_LOG

エラーを記録して続行します。ログには、範囲外エラーごとのトレースバック情報が含まれます。 これはデフォルトのレポートモードです。

ルーチン名を含むより詳細なトレースバック情報を取得するには、traceback コンパイラー・オプションを指定します。

__CHKP_REPORT_TRACE_TERM

エラーを記録して終了します。ログには、範囲外エラーごとのトレースバック情報が含まれます。 最初の範囲エラーのみレポートされます。

ルーチン名を含むより詳細なトレースバック情報を取得するには、traceback コンパイラー・オプションを指定します。

__CHKP_REPORT_TRACE_CALLBACK

エラーを記録してユーザー定義ルーチンを呼び出します。ログには、範囲外エラーごとのトレースバック情報が含まれます。

ルーチン名を含むより詳細なトレースバック情報を取得するには、traceback コンパイラー・オプションを指定します。

__CHKP_REPORT_OOB_STATS

範囲違反の統計を出力します。現在、これは範囲外エラーのカウントです。

__CHKP_REPORT_USE_ENV_VAR

環境変数 INTEL_CHKP_REPORT_MODE を使用してレポートモードを指定します。 環境変数が設定されていない場合は、デフォルトのレポートモードが使用されます。

レポートモードの変更

レポートモードをデフォルトの __CHKP_REPORT_TRACE_LOG から変更するには、次の操作を行います。

  1. プログラムのソースに chkp.h をインクルードします。

  2. いずれかの enum 値を指定して、レポート制御ルーチン __chkp_report_control() の呼び出しを (ポインター参照が行われる前に) 追加します。

    例えば、すべての範囲エラーをレポートするには、次のように指定します。

    __chkp_report_control(__CHKP_REPORT_LOG, 0);

上記では、ルーチンの最初の引数は enum 値で、2 番目の引数は 0 です (2 番目の引数にユーザー定義コールバック・ルーチンの名前を指定する __CHKP_REPORT_CALLBACK enum 値を除く)。

環境変数 INTEL_CHKP_REPORT_MODE を使用してレポートモードを変更することもできます。 この方法では、コードを再コンパイルしなくてもレポートモードを変更できます。 環境変数を使用するには、次の操作を行います。

  1. プログラムのソースに chkp.h をインクルードします。

  2. __CHKP_REPORT_USE_ENV_VAR を指定して、レポート制御ルーチン __chkp_report_control() の呼び出しを (ポインター参照が行われる前に) 追加します。

  3. INTEL_CHKP_REPORT_MODE 環境変数を任意のレポートモードに設定します。 次に例を示します。

    export INTEL_CHKP_REPORT_MODE=__CHKP_REPORT_OOB_STATS

INTEL_CHKP_REPORT_MODE 環境変数は、レポートモードが __CHKP_REPORT_USE_ENV_VAR に設定され、__chkp_report_control が呼び出される場合のみ有効です。 それ以外の場合は無視されます。

レポートモードを __CHKP_REPORT_USE_ENV_VAR に設定しても、INTEL_CHKP_REPORT_MODE 環境変数が設定されていない場合は、デフォルトのレポートモード (__CHKP_REPORT_TRACE_LOG) が使用されます。

関連情報