この記事は、インテル® デベロッパー・ゾーンに公開されている「Tutorial: Analyzing Memory Errors With Intel® Inspector and a C++ Sample Application for Windows*」の日本語参考訳です。
この記事の PDF 版はこちらからご利用になれます。
目次
メモリーエラー解析の使用例
ナビゲーションのクイックスタート
Visual Studio* IDE: プロジェクトの選択とアプリケーションのビルド
スタンドアロン GUI: アプリケーションのビルドと新規プロジェクトの作成
解析の設定
解析の実行
問題の選択
結果データの解釈
問題の解決
リビルドと解析の再実行
まとめ
法務上の注意書き
インテル® Inspector は、Windows* および Linux* でシリアル・アプリケーションおよびマルチスレッド・アプリケーションを開発するユーザー向けの、メモリーとスレッドのエラーを動的にチェックするツールです。
このチュートリアルでは、C++ サンプル・アプリケーションを使用して、Windows* プラットフォームでインテル® Inspector を利用してメモリーエラーを解析する方法を示します。
インテル® Inspector は、スタンドアロン製品として、または次の製品のコンポーネントとして利用できます。
- インテル® System Studio Professional Edition
- インテル® System Studio Ultimate Edition
- インテル® Parallel Studio XE Professional Edition
- インテル® Parallel Studio XE Cluster Edition
- ベータ版インテル® oneAPI HPC ツールキット
- ベータ版インテル® oneAPI IoT ツールキット
チュートリアルの概要 | 最終的に独自のアプリケーションに適用可能なエンドツーエンドのワークフローを示します。
このチュートリアルは、バージョン 2017 以降向けに作成されています。バージョン 2018 以降では、スクリーンショットの背景色が異なります。 |
所要時間 | 10 – 15 分 |
目的 | 以下のトピックについて説明します。
|
関連情報 | このチュートリアルの概念と手順は、プログラミング言語に関係なく適用されますが、別のプログラミング言語のサンプル・アプリケーションを使用したチュートリアルも用意されています。
これらのサイトでは、ほかのインテル製品のチュートリアルも提供されています。 さらに、以下のサイトから追加のリソースを利用できます。 |
メモリーエラー解析の使用例
強力で柔軟性に優れたインテル® Inspector を活用する方法はたくさんあります。シリアルプログラムと並列プログラムのメモリーエラーを見つけて修正する次のワークフローは、生産性を迅速かつ最大限に高める 1 つの方法です。
このチュートリアルでは、次の方法でこのワークフローを実装します。
ステップ 1: サンプルの展開と 解析用の設定 |
次のいずれかを行います。
|
ステップ 2: 結果の収集 |
|
ステップ 3: 結果の調査 |
|
ステップ 4: 作業の確認 |
アプリケーションをリビルドして、メモリーエラー解析を再度実行します。 |
ナビゲーションのクイックスタート
- インテル® Inspector 環境を設定する
- インテル® Inspector スタンドアロン GUI を開く
- インテル® Inspector スタンドアロン GUI を使用する
- Microsoft* Visual Studio* IDE でインテル® Inspector を使用する
- インテル® Inspector の結果タブを使用する
インテル® Inspector 環境を設定する
注
インテル® Inspector 環境の設定は、inspxe-gui
コマンドでインテル® Inspector スタンドアロン GUI を起動する場合、または inspxe-cl
コマンドでコマンドライン・インターフェイスを実行する場合のみ必要です。
インテル® Parallel Studio XE に含まれるインテル® Inspector では、次のいずれかの方法で環境を設定します。
<inspector-install-dir>\inspxe-vars.bat
コマンドを実行します。デフォルトのインストール先
<inspector-install-dir>
は、C:\Program Files (x86)\IntelSWTools\
以下です (システムによっては、ディレクトリー名がProgram Files (x86)
ではなくProgram Files
になります)。<studio-install-dir>\psxevars.bat
コマンドを実行します。デフォルトのインストール先
<studio-install-dir>
は、C:\Program Files (x86)\IntelSWTools\
以下です。
インテル® System Studio に含まれるインテル® Inspector では、<inspector-install-dir>\inspxe-vars.bat
コマンドを実行して環境を設定します。デフォルトのインストール先 <inspector-install-dir>
は、C:\Program Files (x86)\IntelSWTools\
以下です (システムによっては、ディレクトリー名が Program Files (x86)
ではなく Program Files
になります)。
インテル® oneAPI HPC ツールキットまたはインテル® oneAPI IoT ツールキットに含まれるインテル® Inspector では、<oneapi-install-dir>\env\vars.bat コマンドを実行します。デフォルトのインストール先 <oneapi-install-dir> は、C:\Program Files (x86)\inteloneapi\
以下です。
インテル® Inspector スタンドアロン GUI を開く
インテル® Parallel Studio XE に含まれるインテル® Inspector スタンドアロン GUI では、次のいずれかの操作を行います。
inspxe-gui
コマンドを実行します。- Microsoft* Windows* 7 の [スタート] メニューから、[Intel Parallel Studio XE version] > [Analyzers] > [Intel Inspector version] を選択します。
- Microsoft* Windows* 8/8.1/10 の [すべてのアプリ] 画面から、[Intel Parallel Studio XE version] > [Intel Inspector version] を選択します。
インテル® System Studio に含まれるインテル® Inspector スタンドアロン GUI では、次のいずれかの操作を行います。
inspxe-gui
コマンドを実行します。- Microsoft* Windows* 7 の [スタート] メニューから、[Intel System Studio version for Windows target] > [Analyzers] > [Intel Inspector version for Systems] を選択します。
- Microsoft* Windows* 8/8.1/10 の [すべてのアプリ] 画面から、[Intel System Studio version for Windows target] > [Analyzers] > [Intel Inspector version for Systems] を選択します。
インテル® Inspector スタンドアロン GUI を使用する
Microsoft* Visual Studio* IDE でインテル® Inspector を使用する
メニュー、ツールバー、および [ソリューション エクスプローラー] は、多くの同じ機能を実行する異なる方法を提供します。 | |
A | [ツール] > [Intel Inspector version] メニューを使用して、解析結果の作成、結果の比較、および結果のアーカイブファイル、プロジェクトに関連付けられていない結果、またはインテルのほかのエラー検出製品の結果の現在のプロジェクトへのインポートを行います。 |
B | インテル® Inspector ツールバーを使用して、入門ページを開く、解析結果の作成、結果の比較、プロジェクトの設定を行います。 |
C | [ソリューション エクスプローラー] コンテキスト・メニュー (右クリックで表示) を使用して、次の操作を行います。
|
インテル® Inspector の結果タブを使用する
1 |
結果タブの名前で結果を区別します。 |
2 | ナビゲーション・ツールバーのボタンをクリックしてウィンドウを切り替えます。 |
3 | ウィンドウペインで結果データを表示および管理します。 |
4 | ボタンをクリックしてウィンドウペインの使用法に関するヘルプページを表示します。 |
5 | ウィンドウペインの境界をドラッグしてウィンドウペインのサイズを変更します。 |
6 | 、、、または をクリックしてウィンドウペインの表示/非表示を切り替えます。 |
7 | ウィンドウペインのデータ・コントロールをクリックして、ペイン内 (および可能な場合は隣接するペイン) の結果データを調整します。 |
8 | タイトルバーでウィンドウペインを識別します。 |
9 | データの列見出し – データ列をドラッグして配置を変更します。左または右の境界をドラッグしてデータ列のサイズを変更します。列見出しをクリックして結果を昇順または降順に並べ替えます。 |
10 | ウィンドウペインでデータを右クリックして、主要機能へのアクセスを提供するコンテキスト・メニューを表示します。 |
Visual Studio* IDE: プロジェクトの選択とアプリケーションのビルド
ここで紹介する手順は、インテル® Inspector の Visual Studio* IDE プラグインを使用する場合のみ実行してください。
インテル® Inspector でメモリーエラーを調査可能なアプリケーションを作成します。
- ソフトウェア・ツールを取得する
- Visual Studio* ソリューションを開く
- スタートアップ・プロジェクトを選択する
- 最適なコンパイラー/リンカー設定を理解する
- アプリケーションをビルドしてテストする
ソフトウェア・ツールを取得する
tachyon_insp_xe
サンプル・アプリケーションを使用してチュートリアルの手順を実行するには、次のツールが必要です。
- インテル® Inspector のインストール・パッケージとライセンス
.zip
ファイルの展開ユーティリティー- サポートされるコンパイラー (詳細はリリースノートを参照)
インテル® Inspector をまだインストールしていない場合は、https://www.isus.jp/intel-inspector-xe/ から評価版をダウンロードします。
インテル® Inspector サンプル・アプリケーションをインストールして設定する
tachyon_insp_xe.zip
ファイルを<install-dir>\samples\<locale>\C++\
ディレクトリーから書き込み可能なディレクトリーへコピーするか、システムで共有します。デフォルトの<install-dir>
は、C:\Program Files (x86)\Intel\
以下です (システムによっては、ディレクトリー名がProgram Files (x86)
ではなくProgram Files
になります)。.zip
ファイルからサンプルを展開します。
注
- サンプルは非決定的です。このチュートリアルで示すスクリーンショットは、実際の画面とは異なる場合があります。
- サンプルは、インテル® Inspector の機能を説明することを目的としており、コード作成のベスト・プラクティスを示すものではありません。
Visual Studio* ソリューションを開く
- [ファイル] > [開く] > [プロジェクト/ソリューション] を選択します。
- [プロジェクトを開く] ダイアログボックスで
tachyon_insp_xe\vc10\tachyon_insp_xe.sln
ファイルを開いて、[ソリューション エクスプローラー] に tachyon_insp_xe ソリューションを表示します。
注
tachyon_insp_xe.sln
ソリューションは Visual Studio* 2010 IDE で作成されています。Visual Studio* 変換ウィザードが表示された場合は、インストールされているバージョンの Visual Studio* IDE でソリューションが動作するように、画面の指示に従ってソリューションを変換してください。
スタートアップ・プロジェクトを選択する
find_and_fix_memory_errors プロジェクトがスタートアップ・プロジェクトに設定されていない場合 ([ソリューション エクスプローラー] でプロジェクト名が太字で表示されていない場合)、次の操作を行います。
- [ソリューション エクスプローラー] で find_and_fix_memory_errors プロジェクトを右クリックします。
- [スタートアップ プロジェクトに設定] を選択します。プロジェクト名が太字に変わります。
最適なコンパイラー/リンカー設定を理解する
インテル® Inspector は、デバッグモードとリリースモードの C++ および Fortran バイナリーでメモリーとスレッドのエラーを解析できますが、次の設定を使用してデバッグモードでコンパイル/リンクされたアプリケーションにおいて最も正確で完全な解析結果を生成します。
コンパイラー/リンカーのプロパティー | 適切な C/C++ 設定 | 不適切な設定による影響 |
---|---|---|
デバッグ情報 | 有効 (/Zi または /ZI ) |
ファイル/行情報の欠落 |
最適化 | 無効 (/Od ) |
正しくないファイル/行情報 |
ダイナミック・ランタイム・ライブラリー | 選択 (/MD または /MDd ) |
誤検出またはコード位置の欠落 |
基本ランタイム・エラー・チェック | 無効 (Visual Studio* IDE のデフォルトのオプションである /RTC は使用しない) |
誤検出 |
コンパイラー/リンカーのプロパティー | 適切な Fortran 設定 | 不適切な設定による影響 |
デバッグ情報 | 有効 (/debug:full ) |
ファイル/行情報の欠落 |
最適化 | 無効 (/Od ) |
正しくないファイル/行情報 |
ダイナミック・ランタイム・ライブラリー | 選択 (/libs:dll/threads または libs:dll/threads/dbglibs ) |
誤検出またはコード位置の欠落 |
基本ランタイム・エラー・チェック | なし (/check:none ) |
誤検出 |
サンプルコードは、すでに適切に設定されています。アプリケーションの設定を変更する必要がある場合は、次の手順に従ってください。
- Visual Studio* の標準ツールバーで [ソリューション構成] ドロップダウンが Release に設定されている場合は Debug に変更します。
- [ソリューション エクスプローラー] で find_and_fix_memory_errors プロジェクトを右クリックして、[プロパティ] を選択して [プロパティ ページ] ダイアログボックスを表示します。
- 左のペインで、[構成プロパティ] > [C/C++] を選択します。
- [全般] を選択して、[デバッグ情報の形式] フィールドが [プログラム データベース (/Zi)] または [エディット コンティニュ用プログラム データベース (/ZI)] に設定されていることを確認します。
- [最適化] を選択して、[最適化] フィールドが [無効 (/Od)] に設定されていることを確認します。
- [コード生成] を選択します。[ランタイム ライブラリ] フィールドが [マルチスレッド DLL (/MD)] または [マルチスレッド デバッグ DLL (/MDd)] に設定されており、[基本ランタイム チェック] フィールドが [規定] に設定されていることを確認します。
- 左のペインで、[構成プロパティ] > [リンカー] > [デバッグ] を選択して、[デバッグ情報の生成] フィールドが [デバッグ情報の生成 (/DEBUG)] に設定されていることを確認します。
- [適用] ボタンをクリックしてから、[OK] ボタンをクリックして [プロパティ ページ] ダイアログボックスを閉じます。
アプリケーションをビルドしてテストする
- [ビルド] > [ソリューションのビルド] を選択して、ソリューション内のすべてのプロジェクトをビルドします。
- [出力] ウィンドウのメッセージを確認して、ビルドが正常に終了したことを確認します。
- [デバッグ] > [デバッグなしで開始] を選択して、アプリケーションをテストします。
- アプリケーションの出力は次のようになります。
アプリケーションの出力ウィンドウは空です。原因はメモリーエラーです。さまざまなメモリーエラーを解決すると、アプリケーションの出力は次のようになります。
スタンドアロン GUI: アプリケーションのビルドと新規プロジェクトの作成
ここで紹介する手順は、インテル® Inspector のスタンドアロン GUI を使用する場合のみ実行してください。
インテル® Inspector でメモリーエラーを調査可能なアプリケーションを作成します。
- ソフトウェア・ツールを取得する
- 最適なコンパイラー/リンカー設定を理解する
- アプリケーションをビルドする
- アプリケーションがインテル® Inspector の外部で実行されることを確認する
- インテル® Inspector 環境を設定する
- インテル® Inspector スタンドアロン GUI を開く
- 新しいプロジェクトを作成する
ソフトウェア・ツールを取得する
tachyon_insp_xe
サンプル・アプリケーションを使用してチュートリアルの手順を実行するには、次のツールが必要です。
- インテル® Inspector のインストール・パッケージとライセンス
.zip
ファイルの展開ユーティリティー- サポートされるコンパイラー (詳細はリリースノートを参照)
インテル® Inspector をまだインストールしていない場合は、https://www.isus.jp/intel-inspector-xe/ から評価版をダウンロードします。
インテル® Inspector サンプル・アプリケーションをインストールして設定する
tachyon_insp_xe.zip
ファイルを<install-dir>\samples\<locale>\C++\
ディレクトリーから書き込み可能なディレクトリーへコピーするか、システムで共有します。デフォルトの<install-dir>
は、C:\Program Files (x86)\Intel\
以下です (システムによっては、ディレクトリー名がProgram Files (x86)
ではなくProgram Files
になります)。.zip
ファイルからサンプルを展開して、tachyon_insp_xe
ディレクトリーを作成します。
注
- サンプルは非決定的です。このチュートリアルで示すスクリーンショットは、実際の画面とは異なる場合があります。
- サンプルは、インテル® Inspector の機能を説明することを目的としており、コード作成のベスト・プラクティスを示すものではありません。
最適なコンパイラー/リンカー設定を理解する
インテル® Inspector は、デバッグモードとリリースモードの C++ および Fortran バイナリーでメモリーとスレッドのエラーを解析できますが、次の設定を使用してデバッグモードでコンパイル/リンクされたアプリケーションにおいて最も正確で完全な解析結果を生成します。
コンパイラー/リンカーのプロパティー | 適切な C/C++ 設定 | 不適切な設定による影響 |
---|---|---|
デバッグ情報 | 有効 (/Zi または /ZI ) |
ファイル/行情報の欠落 |
最適化 | 無効 (/Od ) |
正しくないファイル/行情報 |
ダイナミック・ランタイム・ライブラリー | 選択 (/MD または /MDd ) |
誤検出またはコード位置の欠落 |
基本ランタイム・エラー・チェック | 無効 (Visual Studio* IDE のデフォルトのオプションである /RTC は使用しない) |
誤検出 |
コンパイラー/リンカーのプロパティー | 適切な Fortran 設定 | 不適切な設定による影響 |
デバッグ情報 | 有効 (/debug:full ) |
ファイル/行情報の欠落 |
最適化 | 無効 (/Od ) |
正しくないファイル/行情報 |
ダイナミック・ランタイム・ライブラリー | 選択 (/libs:dll/threads または libs:dll/threads/dbglibs ) |
誤検出またはコード位置の欠落 |
基本ランタイム・エラー・チェック | なし (/check:none ) |
誤検出 |
アプリケーションをビルドする
- ご使用の Visual Studio* と OS 用の Visual Studio Tools から、コマンド・プロンプト・ショートカットのいずれかを選択します。例えば、Microsoft* Windows* 10 の [すべてのアプリ] 画面から [Visual Studio 2013] > [Visual Studio Tools] > [VS 2013 用 x64 Native Tools コマンド プロンプト] を選択します。
- コマンド プロンプト・ウィンドウで、ディレクトリーを .zip ファイルの展開先の
tachyon_inspxe\
に変更します。 - Microsoft* Visual Studio* 2012 以降を使用する場合、次のコマンドを実行して
tachyon_insp_xe.sln
ソリューションを変換します。
devenv vc10\tachyon_insp_xe.sln /Upgrade
- 次のコマンドを実行して、ソリューション内のすべてのプロジェクトをビルドします。
devenv vc10\tachyon_insp_xe.sln /Build
アプリケーションがインテル® Inspector の外部で実行されることを確認する
- ディレクトリーを
vc10\find_and_fix_memory_errors_Win32\Debug\
に変更します。 - 次のコマンドでアプリケーションを実行します。
find_and_fix_memory_errors.exe ..\..\..\dat\simpleballs.dat
- アプリケーションの出力は次のようになります。
アプリケーションの出力ウィンドウは空です。原因はメモリーエラーです。さまざまなメモリーエラーを解決すると、アプリケーションの出力は次のようになります。
ヒント
コマンド・プロンプト・ウィンドウは開いたままにします。
インテル® Inspector 環境を設定する
注
インテル® Inspector 環境の設定は、inspxe-gui
コマンドでインテル® Inspector スタンドアロン GUI を起動する場合、または inspxe-cl
コマンドでコマンドライン・インターフェイスを実行する場合のみ必要です。
インテル® Parallel Studio XE に含まれるインテル® Inspector では、次のいずれかの方法で環境を設定します。
<inspector-install-dir>\inspxe-vars.bat
コマンドを実行します。デフォルトのインストール先
<inspector-install-dir>
は、C:\Program Files (x86)\IntelSWTools\
以下です (システムによっては、ディレクトリー名がProgram Files (x86)
ではなくProgram Files
になります)。<studio-install-dir>\psxevars.bat
コマンドを実行します。デフォルトのインストール先
<studio-install-dir>
は、C:\Program Files (x86)\IntelSWTools\
以下です。
インテル® System Studio に含まれるインテル® Inspector では、<inspector-install-dir>\inspxe-vars.bat
コマンドを実行して環境を設定します。デフォルトのインストール先 <inspector-install-dir>
は、C:\Program Files (x86)\IntelSWTools\
以下です (システムによっては、ディレクトリー名が Program Files (x86)
ではなく Program Files
になります)。
インテル® oneAPI HPC ツールキットまたはインテル® oneAPI IoT ツールキットに含まれるインテル® Inspector では、<oneapi-install-dir>\env\vars.bat コマンドを実行します。デフォルトのインストール先 <oneapi-install-dir> は、C:\Program Files (x86)\inteloneapi\
以下です。
インテル® Inspector スタンドアロン GUI を開く
インテル® Parallel Studio XE に含まれるインテル® Inspector スタンドアロン GUI では、次のいずれかの操作を行います。
inspxe-gui
コマンドを実行します。- Microsoft* Windows* 7 の [スタート] メニューから、[Intel Parallel Studio XE version] > [Analyzers] > [Intel Inspector version] を選択します。
- Microsoft* Windows* 8/8.1/10 の [すべてのアプリ] 画面から、[Intel Parallel Studio XE version] > [Intel Inspector version] を選択します。
インテル® System Studio に含まれるインテル® Inspector スタンドアロン GUI では、次のいずれかの操作を行います。
inspxe-gui
コマンドを実行します。- Microsoft* Windows* 7 の [スタート] メニューから、[Intel System Studio version for Windows target] > [Analyzers] > [Intel Inspector version for Systems] を選択します。
- Microsoft* Windows* 8/8.1/10 の [すべてのアプリ] 画面から、[Intel System Studio version for Windows target] > [Analyzers] > [Intel Inspector version for Systems] を選択します。
新しいプロジェクトを作成する
- [File] > [New] > [Project…] を選択して、次のようなダイアログボックスを表示します。
- [Project name] フィールドに
memory
と入力します。[Create project] ボタンをクリックして、\Inspector\Projects\memory\
ディレクトリー (デフォルトの場所) にconfig.inspxeproj
ファイルを生成します。次のようなダイアログボックスが表示されます。 - [Application] フィールドの横にある [Browse…] ボタンをクリックして、
tachyon_insp_xe\vc10\find_and_fix_memory_errors_Win32\Debug\find_and_find_memory_errors.exe
アプリケーションを選択します。インテル® Inspector によって [Working directory] フィールドに値が自動入力されます。 - [Application Parameters] フィールドの横にある [Modify…] ボタンをクリックします。[Application Parameters] ウィンドウで、[Browse to insert file path] ボタンをクリックします。表示される [Select File] ウィンドウで、ファイルの種類を [All Files (*.*)] に変更して
tachyon_insp_xe\dat\simpleballs.dat
ファイルを選択し、[開く] ボタンをクリックします。[OK] ボタンをクリックして [Application Parameters] ウィンドウを閉じたら、[OK] ボタンをクリックして [Welcome] ページに戻ります。開いたプロジェクトの名前がタイトルバーと [Project Navigator] ペインに表示されます (必要に応じて、[View] > [Project Navigator] を選択して [Project Navigator] を表示します)。
解析の設定
インテル® Inspector には、解析の範囲とコストの制御を支援するため、事前定義済みのさまざまなメモリー解析タイプが用意されています。範囲が最も狭い解析タイプは、システムの負荷、および解析の実行に必要な時間とリソースが最小になりますが、最も少ないエラーセットを検出し、最小限の情報のみ提供します。範囲が最も広い解析タイプは、システムの負荷、および解析の実行に必要な時間とリソースが最大になりますが、最も多くのエラーセットを検出し、最も詳細な情報を提供します。
メモリーエラー解析を設定します。
[Analysis Type] ウィンドウを理解する
次のような [Analysis Type] ウィンドウを表示します。
- 次のいずれかの操作を行います。
- Visual Studio* のメニューから、[ツール] > [Intel Inspector version] > [New Analysis…] を選択します。
- インテル® Inspector スタンドアロン GUI のメニューから、[File] > [New] > [Analysis…] を選択します。
- 解析タイプ・ドロップダウン・リストから [Memory Error Analysis] を選択します。
- スライダーを使用して [Detect Memory Problems] 解析タイプを選択します。
注
ウィンドウに 3 つのインタラクティブなデバッガー・ラジオボタンが表示される場合があります。
メモリーエラー解析タイプを選択する
次のステップに進む前に、設定内容が上記のスクリーンショットと一致していることを確認してください。インタラクティブなデバッガー・ラジオボタンが表示されている場合は、[Analyze without Debugger] ラジオボタンがオンになっていることを確認してください。
解析の実行
修正が必要なメモリーエラーを検出するには、[Analysis Type] ウィンドウの [Start] ボタンをクリックします。インテル® Inspector は、次の処理を実行します。
find_and_fix_memory_errors.exe
アプリケーションを実行します。- 対応が必要なメモリーエラーを識別します。
- 次のディレクトリーに結果を収集します。
tachyon_insp_xe\vc10\My Inspector Results - find_and_fix_memory_errors\
ディレクトリー (Visual Studio* IDE)Inspector\Projects\memory\
ディレクトリー (インテル® Inspector スタンドアロン GUI)
- 結果をファイナライズします。
解析中、インテル® Inspector は次のような [Collection Log] ウィンドウを表示します。
注
このチュートリアルでは、インテル® Inspector スタンドアロン GUI から解析を実行する方法を説明します。インテル® Inspector コマンドライン・インターフェイス (inspxe-cl
コマンド) を使用して解析を実行することもできます。
解析が完了すると、[Summary] ウィンドウが自動的に表示されます。
問題の選択
検出されたメモリーエラーの調査を開始します。
主要な用語を理解する
code location (コード位置): 「書き込み」コード位置など、インテル® Inspector が観測したソースコードの場所。以前は observation (観測位置) と呼ばれていました。
problem (問題): 初期化されていないメモリーアクセスなど、1 回または複数回検出された問題。問題が複数回検出された場合、コールスタックは同じですが、スレッドやタイムスタンプは異なります。問題とそれぞれの検出に関する情報を確認できます。
problem set (問題セット): アプリケーション実行中のオブジェクトの割り当て解除が早すぎることに起因する問題セットなど、解決策が共通している可能性がある、共通の問題タイプと共有コード位置を持つ問題のグループ。問題セットは、解析が完了した後にのみ表示されます。
[Summary] ウィンドウ内の各種ペインを理解する
解析が完了すると、次のような [Summary] ウィンドウが自動的に表示されます。
問題を選択する
確認が終わったら、[Mismatched allocation/deallocation] 問題セットのデータ行をダブルクリックして、[Sources] ウィンドウでエラーの原因に関する詳細を確認します。
結果データの解釈
検出されたメモリーエラーの原因を特定します。
[Sources] ウィンドウ内の各種タブを理解する
[Mismatched allocation/deallocation] 問題セットのデータ行をダブルクリックすると、次のような [Sources] ウィンドウが表示され、エラーの原因に関する詳細な情報を確認できます。
問題の解釈と解決に関する詳細情報にアクセスする
- ソースタブまたは [Disassembly] タブ内の任意の場所を右クリックします。
- [Explain Problem] を選択して、[Mismatched deallocation site] 問題タイプに関するインテル® Inspector のヘルプを表示します。
問題の解決
検出されたメモリーエラーを修正します。
問題を調査する
find_and_fix_memory_errors.cpp
サンプルファイルに埋め込まれているコメントから、[Mismatched allocation/deallocation] 問題の原因は、適切な割り当て解除関数 delete
の代わりに free
が使用されているためだと分かります。
エディターにアクセスする
ソースタブでハイライト表示されているコードをダブルクリックして、エディターで find_and_fix_memory_errors.cpp
ソースファイルを開きます。
ソースコードを変更する
- free(drawing); をコメントアウトして、//delete drawing; のコメントを外します。
- 編集内容を保存します。
- 結果タブをクリックして [Sources] ウィンドウに戻ります。
注
[Sources] ウィンドウのデータは、解析時のソースコードであるため、変更内容は反映されません。 - [Summary] ボタンをクリックして [Summary] ウィンドウを再度表示します。
リビルドと解析の再実行
ソースコードの変更により [Mismatched allocation/deallocation] 問題が修正されたかどうか確認します。
アプリケーションをリビルドする
Visual Studio* IDE を使用する場合:
- [ビルド] > [ソリューションのクリーン] を選択します。
- [ビルド] > [ソリューションのリビルド] を選択します。
インテル® Inspector スタンドアロン GUI を使用する場合:
- 以前に開いたコマンド プロンプト・ウィンドウで、ディレクトリーを
tachyon_inspxe\
に変更します。 - 次のコマンドを実行します。
devenv vc10\tachyon_insp_xe.sln /Clean
- 次のコマンドを実行します。
devenv vc10\tachyon_insp_xe.sln /Build
解析を再度実行する
同じ解析タイプの別の解析を実行します。
- Visual Studio* のメニューから、[ツール] > [Intel Inspector version] > [Memory Error Analysis / Detect Memory Problems] を選択します。
- インテル® Inspector スタンドアロン GUI のメニューから、[File] > [Memory Error Analysis / Detect Memory Problems] を選択します。
アプリケーションの出力が適切に表示されるようになります。
解析 (収集とファイナライズの両方) が完了すると、[Summary] ウィンドウが自動的に表示されます。
次のことに気付くでしょう。
- 新しい結果タブ「r002mi2」が作成されます。
- [Mismatched allocation/deallocation] 問題が検出されなくなりました。
まとめ
このチュートリアルでは、最終的に独自のアプリケーションに適用可能なエンドツーエンドのワークフローを示しました。
ステップ | チュートリアルの内容 | 要点 |
---|---|---|
1. 設定 | Visual Studio* IDE の場合: プロジェクトを選択して、プロジェクトが最も正確で完全な解析結果を生成するように設定されていることを確認し、アプリケーションをビルドしてインテル® Inspector の外部で実行されることを確認します。
スタンドアロン GUI の場合: 最適なコンパイラー/リンカー設定でアプリケーションをビルドして、インテル® Inspector の外部で実行されることを確認し、インテル® Inspector 環境を設定して、解析結果を保持するプロジェクトを作成します。 |
次のオプションでデバッグモードでコンパイル/リンクされたアプリケーションは、最も正確で完全な結果を生成します: /Zi または /ZI 、/MD または /MDd 、/Od を指定し、/RTC を指定しない。 |
2. 結果の収集 | 解析タイプを選択して解析を実行します。解析中、インテル® Inspector は次の処理を行います。
|
|
3. 結果の調査 | 検出された問題を調査し、結果データを解釈して、インテル® Inspector からエディターに直接アクセスしてソースコードを変更します。 |
|
4. 作業の確認 | アプリケーションをリビルド/再リンクして、再度調査します。 |
次のステップ: 解析用に独自のアプリケーションを準備して、インテル® Inspector でエラーを見つけて修正します。
法務上の注意書き
本資料は、明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず、いかなる知的財産権のライセンスも許諾するものではありません。
インテル® テクノロジーの機能と利点はシステム構成によって異なり、対応するハードウェアやソフトウェア、またはサービスの有効化が必要となる場合があります。実際の性能はシステム構成によって異なります。絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。詳細については、各システムメーカーまたは販売店にお問い合わせいただくか、http://www.intel.co.jp/ を参照してください。
インテルは、明示されているか否かにかかわらず、いかなる保証もいたしません。ここにいう保証には、商品適格性、特定目的への適合性、および非侵害性の黙示の保証、ならびに履行の過程、取引の過程、または取引での使用から生じるあらゆる保証を含みますが、これらに限定されるわけではありません。
本資料には、開発中の製品、サービスおよびプロセスについての情報が含まれています。ここに記載されているすべての情報は、予告なく変更されることがあります。インテルの最新の製品仕様およびロードマップをご希望の方は、インテルの担当者までお問い合わせください。
本資料で説明されている製品およびサービスには、設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。
Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Microsoft および Windows は、米国 Microsoft Corporation の、米国およびその他の国における登録商標または商標です。
© Intel Corporation.
本ソフトウェアおよび関連ドキュメントは、インテルが著作権を有する著作物であり、その使用には付随する明示的なライセンス (「ライセンス」) が適用されます。ライセンスに明記されている場合を除き、インテルから事前に書面による許可なしに、ソフトウェアまたは関連ドキュメントを使用、改変、複製、公開、配布、開示、転送してはなりません。
本ソフトウェアおよび関連ドキュメントは現状のまま提供され、ライセンスに明記されている場合を除き、明示されているか否かにかかわらず、いかなる保証もいたしません。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。