pdb 不匹配或未找到 - 在 windows 中调试

pdb mismatched or not found - Debugging in windows

我是 Windows 编程环境的新手。如果您能帮助我,我将不胜感激:

我有一个名为 Controller.exe 的应用程序,我正在 TeamCity 构建服务器上构建它。应用程序的构建生成 exe 文件和 pdb 文件。

当我在我的部署机器上 运行 Controller.exe 时,它崩溃并生成转储。

在应用程序中,我使用以下选项启用了转储崩溃:

unsigned long stackSize = 16384;
SetThreadStackGuarantee(&stackSize);
SetUnhandledExceptionFilter(WriteLargeMiniDump);

函数WriteLargeMiniDump()成功写入转储。我知道这一点是因为当我在我的开发机器上 运行 Controller.exe 它生成转储并且我可以成功打开它并在源代码中看到崩溃行。

但是,对于 TeamCity 服务器生成的 exepdb,我无法调试转储。当我在 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 与我复制从 TeamCity 服务器生成的 exe 的目录相同。

我是不是遗漏了什么?

我能够解决这个问题。问题是该项目的原作者已将 pdb 签入 TeamCity 正在构建的 SVN 存储库。因此,生成的 exepdb 不匹配。根据 MSDN 文档,我们必须使用 exe.

构建期间生成的 pdb

使用 exe 构建期间生成的 pdb,我能够调试 dump 文件。

帮助我理解 pdb 文件的重要 link 是:https://www.wintellect.com/pdb-files-what-every-developer-must-know