【问题标题】: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中运行它。

标签: c++ visual-studio-2012 visual-studio-debugging pdb-files


【解决方案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 中打开它并点击运行。该程序将崩溃并将我放在我的代码中崩溃的行,包括变量。太棒了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多