Anh*_*ong 10 executable debug-symbols visual-studio pdb-files
我正在尝试一种分析工具,可以在Windows中分析带有嵌入式调试符号信息的可执行文件.在几个开源项目上尝试这个工具时,我意识到大多数构建都没有将符号信息保存在可执行文件中.我能够使用VS(2008)编译源代码,但构建通常将调试信息保存在单独的.pdb文件中,而不是.exe文件中(遗憾的是我只想从.exe文件中读取调试信息而不是.pdb文件:-().
有没有人知道使用Visual Studio将符号调试信息嵌入单个.exe文件的方法?
我还不知道怎么做 - 但MSDN上有关于它的文章.
可移植可执行(即.exe
或.dll
)可以具有存在于头标志:(存档)
Run Code Online (Sandbox Code Playgroud)IMAGE_FILE_DEBUG_STRIPPED
调试信息已删除并单独存储在.dbg文件中.
这意味着调试信息可以在可执行文件中,并且可以选择删除并存储在单独的.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
Run Code Online (Sandbox Code Playgroud)
下一步,以及回答我们问题的部分是:
但答案"它无法完成"似乎是不正确的.
Visual Studio 中没有对此类操作的内置支持(至少对于托管语言而言)。.PDB 和 .EXE 文件是同时创建的,并且没有嵌入选项。我什至不确定 .EXE 格式是否支持嵌入 PDB 符号,尽管我在这一点上可能是错的。
我能看到的唯一方法是将 PDB 作为资源嵌入到 .EXE 中。然而,这必须是构建后步骤,因为两者是同时构建的。如果您在构建 EXE 后对其进行修改,则可能会导致 PDB 的某些部分无效。
您尝试这样做有什么特殊原因吗?我想它最终会给你带来很多痛苦,因为 1)据我所知它不受支持,2)工具链旨在在同一目录中而不是在 .EXE 中查找 PDB。部署 2 个文件一开始有点烦人,但现在就是这样完成的。
归档时间: |
|
查看次数: |
5991 次 |
最近记录: |