13

I am experimenting an analysis tool that can analyze executable files with embedded debug symbol information in Windows. While trying this tool on several open source projects, I realize that most of the builds do not keep symbolic information in executable files. I am able to compile the source code with VS (2008), but the build normally keeps the debug information in a separated .pdb file, not in the .exe file (unfortunately I only want to read debug information from .exe file and not .pdb file :-().

Does anybody know a way to embed symbol debug information into a single .exe file using Visual Studio?

4

5 に答える 5

6

MSDNによると、それは不可能です。

デバッグ情報を含む .exe または .dll を作成することはできません。デバッグ情報は常に .pdb ファイルに配置されます。

于 2014-08-19T08:54:05.877 に答える
5

方法はまだわかりませんが、MSDN に記事があります。

移植可能な実行可能ファイル (すなわち.exeまたは.dll) は、ヘッダーに存在するフラグを持つことができます: ( archive )

IMAGE_FILE_DEBUG_STRIPPED

デバッグ情報は削除され、.dbg ファイルに個別に保存されました。

これは、デバッグ情報を実行可能ファイルに含めることができ、削除して別のファイルに保存するオプション.dbgがあることを意味します。

MSDNの記事DBGファイルから:(アーカイブ

DBG ファイルは移植可能な実行可能 (PE) 形式のファイルであり、Visual Studio デバッガーの Codeview 形式 (および DBG の作成方法によっては他の形式) のデバッグ情報が含まれています。ライブラリや Windows API など、特定のコードのソースがない場合、DBG ファイルはデバッグを許可します。DBG ファイルを使用すると、OLE RPC デバッグも実行できます。

DBG ファイルは PDB ファイルに取って代わられ、現在ではデバッグに一般的に使用されています。

REBASE.EXE ユーティリティを使用して、PE 形式の実行可能ファイルからデバッグ情報を取り除き、DBG ファイルに保存できます。PE ファイル ヘッダーのファイル特性フィールド IMAGE_FILE_DEBUG_STRIPPED は、Codeview 情報が別の DBG ファイルに取り除かれたことをデバッガーに伝えます。

COFF 形式を説明するナレッジベースの記事では、dumpbinユーティリティについて言及されており、/SYMBOLSオプションです。

/SYMBOLS      Setting this option causes DUMPBIN to display the COFF symbol
              table. Symbol tables exist in all object files. A COFF symbol
              table appears in an image file only if it is linked with
              /DEBUG /DEBUGTYPE:COFF

次のステップと、私たちの質問に答える部分は次のとおりです。

  • 埋め込まれたデバッグ情報はどのような形式ですか?
  • 埋め込まれたデバッグ情報は PE のどこに保存されますか? (リソース?、データ セクション?)

しかし、 「できない」という答えは間違っているようです。

こちらもご覧ください

于 2011-10-28T17:17:20.807 に答える
1

Visual Studioには、このタイプの操作に対する組み込みのサポートはありません(少なくとも管理対象言語の場合)。.PDBファイルと.EXEファイルは同時に作成され、埋め込むオプションはありません。この点で間違っている可能性はありますが、.EXE形式がPDBシンボルの埋め込みをサポートしているかどうかさえわかりません。

私が見ることができる唯一のコースは、PDBをリソースとして.EXEに埋め込むことです。ただし、2つは同時にビルドされるため、これはビルド後のステップである必要があります。また、ビルド後にEXEを変更すると、PDBの一部が無効になる可能性があります。

あなたがこれをやろうとしている特別な理由はありますか?1)AFAIKがサポートされておらず、2)ツールチェーンが.EXE内ではなく同じディレクトリでPDBを検索するように調整されているため、多くの問題が発生することになると思います。2つのファイルをデプロイすることは、最初は少し面倒ですが、この時点でどのように行われるかです。

于 2010-08-26T16:17:20.217 に答える
0

I'm pretty sure PDBs were always stand-alone files. VC++ used to have a switch that would cause it to emit (limited compared to PDB) symbol information to a "CodeView" .DBG file that by default was embedded in the EXE. However, that switch appears to no longer be supported in the newer (post 6.x ?) versions of the compiler.

于 2010-08-26T20:10:08.857 に答える