繁体   English   中英

分析.dmp文件

[英]Analyzing .dmp files

我正在尝试解决仅在生产环境中发生的C ++ exe运行时错误问题。 我是C ++和windbg的新手,但是我在这里粘贴了分析。 如果有人可以指出该错误的发生方式和条件,我将不胜感激,更重要的是,我如何确定导致该错误的代码行。 我阅读了很多论坛,但如果在VS 2008中打开dmp文件,则本地有一个pdb文件,本地有exe,但是我永远无法启用“转到源代码”菜单选项。 关于如何分析此.dmp文件以及如何理解它的快速答复,将不胜感激..谢谢!


  • *
  • 异常分析*
  • *

GetPageUrlData失败,服务器返回HTTP状态404 URL请求: http ://watson.microsoft.com/StageOne/MYServer_exe/0_0_0_0/MyServer_exe/0_0_0_0/000194ab.htm?Retriage =1

FAULTING_IP:Myserver + 194ab 004194ab c6040100 mov字节ptr [ecx + eax],0

EXCEPTION_RECORD:ffffffff-(.exr 0xffffffffffffffffff)异常地址:004194ab(Myserver + 0x000194ab)异常代码:c0000005(访问冲突)异常标志:00000000 NumberParameters:2参数[0]:00000001参数[1]:00000000尝试写地址000000

DEFAULT_BUCKET_ID:NULL_POINTER_WRITE

PROCESS_NAME:Myserver.exe

错误代码:(NTSTATUS)0xc0000005-0x%08lx处的指令引用了0x%08lx处的内存。 内存不能为%s。

EXCEPTION_CODE:(NTSTATUS)0xc0000005-0x%08lx处的指令引用了0x%08lx处的内存。 内存不能为%s。

EXCEPTION_PARAMETER1:00000001

EXCEPTION_PARAMETER2:00000000

写地址:00000000

FOLLOWUP_IP:MYServer + 194ab 004194ab c6040100 mov字节ptr [ecx + eax],0

MOD_LIST:

NTGLOBALFLAG:0

APPLICATION_VERIFIER_FLAGS:0

FAULTING_THREAD:000004e0

PRIMARY_PROBLEM_CLASS:NULL_POINTER_WRITE

BUGCHECK_STR:APPLICATION_FAULT_NULL_POINTER_WRITE

LAST_CONTROL_TRANSFER:从00418a4e到004194ab

STACK_TEXT:警告:堆栈展开信息不可用。 以下框架可能是错误的。 087ffa74 00418a4e 0a73b070 087ffc6c 087ffd8c MYSERVER + 0x194ab 087ffb64 00410767 0a73b070 087ffd74 087ffd8c MYSERVER + 0x18a4e 087ffc6c 0041089b 0a73b0f8 0a727a78 0a73b108 MYSERVER + 0x10767 087ffd74 00433913 0a73b0f8 0a727a78 0a73b108 MYSERVER + 0x1089b 087ffe58 0042fbf3 0a73b0f8 0a727a78 00000044 MYSERVER + 0x33913 087fffb8 7d4dfe37 000006a0 00000000 00000000 MYSERVER + 0x2fbf3 087fffec 00000000 0042fae0 000006a0 00000000 kernel32!BaseThreadStart + 0x34

SYMBOL_STACK_INDEX:0

SYMBOL_NAME:Myserver + 194ab

FOLLOWUP_NAME:计算机所有者

MODULE_NAME:我的服务器

IMAGE_NAME:Myserver.exe

DEBUG_FLR_IMAGE_TIMESTAMP:4c2123df

STACK_COMMAND:〜86秒; .ecxr; 千位

FAILURE_BUCKET_ID:NULL_POINTER_WRITE_c0000005_Myserver.exe!未知

BUCKET_ID:APPLICATION_FAULT_NULL_POINTER_WRITE_Myserver + 194ab

后续行动:MachineOwner

k将为您提供线程中当前停止的堆栈跟踪。
~*kb将为您提供所有线程的堆栈跟踪

符号

您可能希望将符号搜索路径设置为包括MS符号,这样可以更好地跟踪堆栈。

您可以每次使用.sympath srv*C:\\Symbols*http://msdl.microsoft.com/download/symbols或更长时间将_NT_SYMBOL_PATH环境var(例如作为系统变量)设置为srv*C:\\Symbols*http://msdl.microsoft.com/download/symbols

您可能需要使用以下方法获取符号以重新加载。

.symfix+ c:\symbols
.reload /f

崩溃线

EXCEPTION_RECORD:ffffffff-(.exr 0xffffffffffffffff)异常地址:004194ab FAULTING_IP:Myserver + 194ab 004194ab c6040100 mov byte ptr [ecx + eax],0

如果您只希望崩溃行,那么有一个应用程序“ CrashFinder”将加载您的应用程序和pdb,并允许您输入此004194ab来报告崩溃行。

您还可以使用顶部菜单设置符号路径(在其中具有应用程序PDB)和源路径(在其中具有源)(我认为它表示设置符号路径和设置源路径)。

对于故障转储,一旦设置了符号和源路径并加载了转储文件,您将发现以下命令很有用: !analyze -v

然后从您粘贴的报告中,检查以下行: STACK_COMMAND: ~86s; .ecxr ; kb STACK_COMMAND: ~86s; .ecxr ; kb STACK_COMMAND: ~86s; .ecxr ; kb此行告诉您引起故障的线程(86)。 刚越过该行进入命令窗口以获取该线程的堆栈: ~86s; .ecxr ; kb ~86s; .ecxr ; kb

如果您对VS更满意,请不要放弃它。 确实看到反汇编和堆栈,并且仅缺少符号吗? 您是否单击了作为模块的堆栈框架,仍然看不到代码? 您甚至可以看到模块中的堆栈框架吗? 您是否已建立对MS公共符号的访问? (无论如何,即使使用WinDbg,也可能应该如此)。 WinDbg是否报告堆栈符号? (它们未在您粘贴到此处的代码段中列出)。 如果不是这样,很可能是符号问题。 在WinDbg和VS上都有诊断它们的方法。 您是否检查了要调试的模块的“符号负载信息”? (VS中最简单的方法是在“模块”窗口中右键单击该模块)。

根据对这些问题的答案的组合,将给出建议。 如果您提供更多详细信息,则可以帮助您集中建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM