加载了本地生成的minidump,但远程生成的minidump无法加载调用堆栈和符号

时间:2015-04-16 10:21:06

标签: c++ visual-studio debugging dump minidump

我的Windows应用程序使用SEH和SetUnhandledExceptionFilter在崩溃时创建一个小型转储。我已成功使用它来调试客户端发生的分段错误。 I. e。我得到一个转储,在本地构建与生成转储的程序相同的程序版本,打开它并可以看到一些调用堆栈条目和源。

但是,现在我有一个由std::exception引起的转储,而不是段错误。除了SEH处理程序之外,我还有一个简单的C ++ catch块,如下所示:

catch (std::exception& e)
{
    Logger() << "std::exception caught:" << e.what();
    throw;
}

同样为异常生成minidump。在本地生成时,它可以打开,我立即看到抛出异常的位置 - 加载PDB,调用堆栈可用,也加载源。但是,当我打开远程生成的转储时,我几乎什么也得不到。唯一的callstack条目是KERNELBASE.dll!_RaiseException@16(),没有加载任何源等。奇怪的是Visual Studio的UI对于异常转储和segfault转储是不同的。加载段错误转储时,通常会说不能找到这样的.pdb;我可以浏览它并加载后的所有内容。有了异常转储,根本就没办法做到这一点。

那么,如何加载我的minidump并查看异常发生站点?

1 个答案:

答案 0 :(得分:1)

尝试重建您的应用程序,保留.pdb文件,并为您的客户端提供此应用程序。当发生新的崩溃时,检查带有已保存的.pdb文件的转储文件。

简而言之,您应该为您提供的每个应用程序版本保留所有.pdb文件。像SymStore之类的东西是为此目的而发明的。