我是Windows编程环境的新手。因此,如果您能帮助我,将不胜感激:
我有一个名为Controller.exe
的应用程序,我正在构建服务器上TeamCity
该应用程序。应用程序的生成生成exe
文件和pdb
文件。
当我在部署计算机上运行Controller.exe
时,它会崩溃并生成转储。
在应用程序中,我启用了以下转储崩溃:
unsigned long stackSize = 16384;
SetThreadStackGuarantee(&stackSize);
SetUnhandledExceptionFilter(WriteLargeMiniDump);
该函数WriteLargeMiniDump()
成功写入转储。我知道这一点,因为当我在开发机器上运行Controller.exe
时,它会生成转储,我可以成功打开它并查看源代码中的崩溃线。
但是,对于 TeamCity 服务器生成的exe
和pdb
,我无法调试转储。当我在visual studio 2015
中打开转储文件并尝试Debug with Native Only
它说pdb
未加载时。
我四处搜索以检查pdb
文件是否正确。所以我下载了Debugging Tools for windows
作为symchk.exe
.
当我运行symchk.exe
时,它给出以下错误:
SYMCHK: Controller.exe FAILED - Controller.pdb mismatched or not found
SYMCHK: FAILED files = 1
SYMCHK: PASSED + IGNORED files = 0
Controller.pdb
位于我复制从服务器生成的exe
TeamCity
目录中。
我在这里错过了什么吗?
我能够解决这个问题。问题在于该项目的原始作者已将pdb
签入TeamCity
正在构建的SVN存储库中。因此,生成的exe
与pdb
不匹配。根据MSDN文档,我们必须使用在构建期间生成的pdb
exe
。
使用在构建exe
期间生成的pdb
,我能够调试dump
文件。
帮助我理解pdb
文件的一个重要链接是: https://www.wintellect.com/pdb-files-what-every-developer-must-know