2009-04-16 59 views
30

.mapファイルの使用方法/ MAPパラメータまたは「マップファイルの生成」プロジェクト設定を使用すると、VC++リンカが生成するものは何ですか?いつ私はそれらを必要とし、どのように私はそれらから恩恵を受けますか?リンカが生成する.mapファイルの使用方法は?

+0

GNU Gasは '-a'で' .map'ファイルを生成します。 –

答えて

25

クラッシュを検出するためにマップファイルを使用する方法に関する素晴らしい記事です。すべて手動でこれを行う

http://www.codeproject.com/KB/debug/mapfile.aspx

はとてもつまらないです。

マップファイルを読み込んでクラッシュ場所を見つけるのに役立つツールはありません。もし誰かが私たちを更新してください知っている。

8

ほとんど必要はありませんが、機能やデータの場所に関する情報を提供するため、いくつかの問題をデバッグするのに便利です。例えば

:すべてのセグメントで

  • 詳細情報(コード、データおよび他の)。あなたがツールをデバッグするためのマップファイルを使用することができ、コード

から

  • リンク行番号。

  • +0

    プロセスの逆アセンブリを開いて、未処理のアドレスを調べるという意味ですか? – sharptooth

    +0

    それは可能性です。私が言ったように、あなたはそれらをめったに必要としませんが、あなたがそれらを必要とするなら、あなたは彼らが利用可能であることをうれしく思います。 –

    12

    組み込みシステムの場合、マップファイルはもっと便利です。 (あなたはそれにVisual C++を使用しませんが)

    プログラム/データメモリがどれだけ近づいているか、特定の変数が存在する場所を知っていることは重要です。

    +0

    UNIXプラットフォームには、リストファイルと同様のものはありますか?はいの場合は、どうすれば生成できますか? – Shree

    +0

    いいえ。コンパイラーの資料を確認してください。 –

    8

    WinDBGは.mapファイルと.pdbファイルを使用して、.hdmpと.mdmpクラッシュダンプを解析するときにクラッシュをデバッグするのに役立ちます。

    基本的にメモリアドレスは、.exe(または.dll)内の関数と変数にマップされます。一般的に非常に便利です。

    EDIT:「事実の後」をデバッグする最も有効な方法は、私のためにWinDbgを使用しています(Windowsプラットフォーム)。それを開き、クラッシュダンプを開きます。その後、コードを指すようにソースパスを設定し(シンボルを持っている場合)、.mapと.pdbを指すシンボルパスと.exeへのイメージパスを入力し、コマンドラインに「!analyze -v」と入力します。今度は、コード行とすべてを含む完全なスタックトレースがあります。
    パスにMSシンボルサーバーがあり、フルページヒープがオンになっていたり、adplusが実行されている場合は、さらに優れています。わたしのこれらの2つの好きなWinDbgのリソースを参照してください:
    最初のピットストップを:: http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx
    フォースシンボルをロード:: http://www.osronline.com/ShowThread.cfm?link=182377
    役立ちサイト::あなたが追跡する必要があるときhttp://www.dumpanalysis.org/blog/index.php/category/windbg-tips-and-tricks/page/7/

    0

    リンカマップは、大規模なプロジェクトに非常に役立ちますコンパイル単位とライブラリ間の依存関係。通常、リンカは問題を引き起こしたシンボルを報告しますが、このシンボル名の単純な検索では結果は返されません(または、readなどのシンボルに対して誤った陽性が返されます)。

    リンカーマップがない場合、唯一の選択肢は、使用可能なすべてのソースファイルを分析することです(マクロが使用されている場合は前処理パスを通過した後です)。

    リンカーマップには、通常、プロジェクトの別のオブジェクトファイルで必要なオブジェクトファイルと、正確に参照されたシンボルを示す「ファイル/シンボルによる参照」というセクションがあります。

    私は、ロケールをサポートしていないシステムに移植しなければならないプロジェクトで作業していました。リンカーは「_localeconv_rへの未定義の参照」エラーを報告していました。これは、ソースを検索して追跡するのに苦労していました。幸いにも、-Map=output.mapで生成されたGCCリンカーマップファイルは、単一の検索ですべての問題のある関数を明らかにしました。

    関連する問題