マップ デバッグ ファイル
ファイルの種類:インデックス への移動
マップ ファイルは普通のテキスト ファイルで、デバッグに役立つ情報としてプログラムのグローバル シンボル、ソース ファイル、ソース行番号が記載されています。 たとえば、(たとえば、アクセス違反のために)アプリケーションがクラッシュしたときは、結果として得られるアドレスを使用して、アプリケーションのクラッシュ箇所のモジュール(メソッド)を突き止めることができます。
マップ デバッグ ファイルの内容と形式
RAD Studio では、デフォルトで、以下を始めとする一般的なセグメント情報が記載されたマップ ファイルを生成します。
- セグメントのリスト(セグメント名を含みます)
- プログラムの開始アドレスとオフセット
- クラス
- CODE(実行可能な命令が記載されます)
- DATA(プログラマによって初期化されたグローバル変数と静的変数が記載されます)
- BSS(静的に割り当てられた変数が記載されます)
- TLS(スレッド ローカル ストレージ)
- リンク時に発生したあらゆる警告メッセージやエラー メッセージ
//hello.cpp
#include<iostream>
#include<string>
int main(int, char**)
{
std::string s("hello world");
std::cout<<s;
return 0;
}
たとえば、上記のコード例の場合、.cpp ファイルのリンク後に作成されるマップ ファイルは次のようになります。
Start Length Name Class 0001:00401000 0000214D4H _TEXT CODE 0002:00423000 0000059B8H _DATA DATA 0003:004289B8 000002F24H _BSS BSS 0004:00000000 00000009CH _TLS TLS
デフォルト情報に加えて -M オプションも指定して BCC32.EXE を呼び出す場合、.map ファイルには以下の 2 つのセクションがあります。
Address Publics by Name 0002:000024C4 @std@%basic_filebufテンプレート:B19std@%charb%%@3 0002:000010E8 @std@%basic_filebufテンプレート:C19std@%charc%%@3 0002:00002450 @std@%basic_iosテンプレート:B19std@%charb%%@3 . . . Address Publics by Value 0001:000000E4 _main 0001:00000730 std::allocator<char>::allocator<char>() . . .
Address Publics by Name セクションには、開始アドレス(<セグメント>:<オフセット>)とシンボル(メソッド、変数など)のペアが記載されます。これらのペアはシンボルの名前でソートされます。Address Publics by Value セクションには、Address Publics by Name セクションと同じペアが記載されますが、こちらの方は値でソートされます。
マップ デバッグ ファイルの生成
Delphi プロジェクトが以下のいずれかの条件を満たす場合、そのプロジェクトをビルドすると、RAD Studio によってマップ デバッグ ファイルが生成されます。
- ビルド対象が 32 ビット Windows、64 ビット Windows、macOS、または iOS シミュレータ向けのプロジェクトで、[マップ ファイル]オプション(プロジェクト|オプション...|Delphi コンパイラ|リンク 内)が[詳細]である。
- ビルド対象が 32 ビット iOS デバイスまたは 64 ビット iOS デバイス向けのプロジェクトで、[プロジェクト|オプション...|Delphi コンパイラ|リンク]の[マップ ファイル ARM]オプションの値が、[マップ ファイルおよび .drc ファイル]である。
C++ プロジェクトをビルドすると、RAD Studio によってマップ デバッグ ファイルが必ず生成されます。
マップ デバッグ ファイルのファイル名は以下のようになります。
- macOS 向け Delphi パッケージの場合:
bpl<<プロジェクト>project>.dylib.map
- それ以外の場合:
<プロジェクト>.map
プロジェクトをビルドすると、マップ デバッグ ファイルがデフォルトでは以下のフォルダに生成されます。
- パッケージ の場合:
- 32 ビット Windows の場合:
C:\Users\Public\Documents\Embarcadero\Studio\23.0\Bpl
- Delphi のその他のプラットフォームと C++ の 64 ビット Windows の場合:
C:\Users\Public\Documents\Embarcadero\Studio\23.0\Bpl\<プラットフォーム>
- C++ のその他のプラットフォームの場合:
C:\Users\Public\Documents\Embarcadero\Studio\23.0\Bpl\<プラットフォーム>\<ビルド構成>
- 32 ビット Windows の場合:
- その他のプロジェクトの場合:
C:\Users\<user>\Documents\Embarcadero\Studio\Projects\<プロジェクト>\<プラットフォーム>\<ビルド構成>
出力ディレクトリを変更するには:
- Delphi の場合: [プロジェクト|オプション...|Delphi コンパイラ]の[パッケージの出力ディレクトリ]オプションを使用します。
- C++ の場合: [プロジェクト|オプション...|C++ (共有オプション)]の[最終出力ディレクトリ]オプションを使用します。