我正在试验一个分析工具,它可以分析Windows中嵌入了调试符号信息的可执行文件。在几个开源项目上尝试此工具时,我意识到大多数构建都不在可执行文件中保留符号信息。我可以使用VS (2008)编译源代码,但构建通常会将调试信息保存在一个单独的.pdb文件中,而不是.exe文件中(不幸的是,我只想从.exe文件中读取调试信息,而不是.pdb文件:-()。
有人知道使用Visual Studio将符号调试信息嵌入到单个.exe文件中的方法吗?
发布于 2017-02-28 14:47:57
我知道这是一个相当老的问题,但这个功能最近已经合并到Roslyn中:https://github.com/dotnet/roslyn/issues/12390
发布于 2010-08-27 00:17:20
Visual Studio中没有对此类型操作的内置支持(至少对于托管语言)。.PDB和.EXE文件是同时创建的,没有嵌入选项。我甚至不确定.EXE格式是否支持嵌入PDB符号,尽管在这一点上我可能是错的。
我能看到的唯一方法就是将PDB作为资源嵌入到.EXE中,但是这必须是一个构建后的步骤,因为这两个步骤是同时构建的。而且,如果在构建之后修改EXE,则可能会使PDB的某些部分失效。
你想这么做有什么特别的原因吗?我想它最终会给你带来很多麻烦,因为1)它不支持AFAIK,2)工具链是为了在相同的目录中寻找PDB,而不是在.EXE中。
发布于 2010-08-27 04:10:09
我很确定PDB总是独立的文件。VC++曾经有一个开关,可以使它将符号信息发送(与PDB相比有限)到默认情况下嵌入在可执行文件中的"CodeView“.DBG文件。但是,在较新版本( 6.x ?之后?)中似乎不再支持该开关。编译器的版本。
https://stackoverflow.com/questions/3576973
复制相似问题