如何将崩溃的“故障偏移”与源代码匹配?
Posted
技术标签:
【中文标题】如何将崩溃的“故障偏移”与源代码匹配?【英文标题】:How to match a crash's "Fault offset" to the source code? 【发布时间】:2014-02-13 20:34:35 【问题描述】:我编译的一个 EXE 总是崩溃。当它崩溃时,我在事件查看器中有以下信息:
异常代码:0xc0000008 故障偏移:0x00000000000cb8e8
如何将“故障偏移”与我的 C++ 代码匹配? Release 文件夹中有一个.PDB
文件,只是不知道如何解决这个问题。
【问题讨论】:
为什么不直接使用调试器? 该 exe 在客户的网站上。 再一次,为什么不直接使用调试器呢?大多数都能够将您带到与特定地址相关联的代码。 对不起,这里没有调试经验的菜鸟,除非在 VS 中单步执行代码!我将使用 VS 中的哪些步骤将“故障偏移”与代码匹配?我必须向客户发送一些特别的东西吗?我是否将某些内容加载到 VS 中? 而且...exe是一项服务,所以即使发布版本包含调试信息,我也无法从VS中运行它。 【参考方案1】:您还需要知道偏移量属于哪个模块,如果您得到 0xC0000008 (STATUS_INVALID_HANDLE
),那么异常可能是从 ntdll.dll 引发的,这不会帮助您调试程序,因为你关心的是更深的堆栈。
您应该做的是让您的客户启用LocalDumps,然后向您发送一个您可以调试的小型转储文件。
示例注册表设置:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
"DumpFolder"="d:\\miniDumps"
"DumpType"=dword:00000002
"CustomDumpFlags"=dword:00001124
【讨论】:
好的...如何将迷你转储文件加载到 VS 中进行调试? 所以我有dmp文件,我把它拖到VS2012中,我把它附加到正在运行的服务进程...现在呢? 你能告诉我我会采取什么 vS2012 步骤来做到这一点吗? 我发现Release文件夹中必须有all源代码。然后,我必须在 VS2012 中打开它并点击运行。该程序将崩溃并将我放在我的代码中崩溃的行,包括变量。太棒了!以上是关于如何将崩溃的“故障偏移”与源代码匹配?的主要内容,如果未能解决你的问题,请参考以下文章