首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分析.dmp文件

分析.dmp文件
EN

Stack Overflow用户
提问于 2010-06-23 20:03:25
回答 3查看 2.4K关注 0票数 1

我试图解决仅在生产中发生的c++ exe运行时错误问题。我对C++和windbg不熟悉,但我在这里粘贴分析。如果有人能告诉我这个错误是如何发生的,在什么情况下发生,更重要的是,我应该如何找出导致错误的代码行,我会非常感激。我读了很多论坛,但是如果我在VS 2008中打开dmp文件,我有一个pdb文件在本地,而exe在本地,但我永远无法获得去源代码菜单选项启用。关于如何分析这个.dmp文件以及如何理解它的快速答复将是非常感谢的。谢谢!

  • *
  • Exception分析*
  • *

GetPageUrlData失败,服务器返回HTTP 404URL请求: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 004194 ptr c6040100 mov字节ptr ecx+eax,0

EXCEPTION_RECORD: ffffffff - (.exr 0 0xffffffffffffffff) ExceptionAddress: 004194 to (Myserver+0x000194ab) ExceptionCode: c0000005 (访问违反) ExceptionFlags: 00000000 NumberParameters: 2参数: 00000001 Parameter1: 00000000试图写入地址00000000

DEFAULT_BUCKET_ID: NULL_POINTER_WRITE

PROCESS_NAME: Myserver.exe

ERROR_CODE:(NTSTATUS) 0xc0000005 -在0x%08lx上的指令引用内存在0x%08lx。内存不能是%s。

EXCEPTION_CODE:(NTSTATUS) 0xc0000005 -在0x%08lx上的指令引用内存在0x%08lx。内存不能是%s。

EXCEPTION_PARAMETER1: 00000001

EXCEPTION_PARAMETER2: 00000000

WRITE_ADDRESS: 00000000

FOLLOWUP_IP: MYServer+194ab 004194 ptr 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 087ffdd74 087ffd8c Myserver+0x18a4e 087ffc6c 0041089b 0a73b0f8 0a727a78 0a73b108 Myserver+0x10767 087ffd74 00433913 0a73b0f8 0a727a78 0a73b108 Myserver+0x1089b 087ffe58 0042fbff3 0a73b0f8 0a727a78 00000044 Myserver+0x33913 087fffb8 7d4ffb8 000000000000000 0000000 Myserver+0x2fbf3 087ffffc 000000000000 Myserver+0x2fbf3 087fff00000000000 kernel32

SYMBOL_STACK_INDEX: 0

SYMBOL_NAME: Myserver+194ab

FOLLOWUP_NAME: MachineOwner

MODULE_NAME: Myserver

IMAGE_NAME: Myserver.exe

DEBUG_FLR_IMAGE_TIMESTAMP: 4c2123df

STACK_COMMAND:~86s;.ecxr;kb

NULL_POINTER_WRITE_c0000005_Myserver.exe!Unknown :FAILURE_BUCKET_ID

APPLICATION_FAULT_NULL_POINTER_WRITE_Myserver+194ab :BUCKET_ID

后续行动: MachineOwner

EN

回答 3

Stack Overflow用户

发布于 2010-06-23 20:58:24

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时,都可以这样做。

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

代码语言:javascript
运行
复制
.symfix+ c:\symbols
.reload /f

撞击线

EXCEPTION_RECORD: ffffffff - (.exr 0 0xffffffffffffffff) ExceptionAddress: 004194 mov FAULTING_IP: Myserver+194ab 004194 mov c6040100 mov字节ptr ecx+eax,0

如果您只需要崩溃的行,那么就有一个应用程序'CrashFinder‘,它将加载您的应用程序和pdb,并允许您输入这个004194ab来报告崩溃的行。

票数 1
EN

Stack Overflow用户

发布于 2010-06-23 21:50:07

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

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

从您粘贴的报告中,检查该行:STACK_COMMAND: ~86s; .ecxr ; kb --这一行告诉您导致错误(86)的线程。在命令窗口中通过该行获得线程的堆栈:~86s; .ecxr ; kb

票数 0
EN

Stack Overflow用户

发布于 2010-06-23 21:50:19

如果你对VS比较满意,不要放弃它。您确实看到了拆卸和堆栈,而只缺少符号?您是否单击作为您的模块的堆栈框架,但仍未看到代码?您甚至可以看到模块中的堆栈框架吗?您建立了使用MS公共符号的权限吗?(不管怎么说,即使使用WinDbg,你也应该这么做)。WinDbg报告堆栈符号吗?(它们不在你粘贴在这里的片段中)。如果不是,这很可能是一个符号问题。在WinDbg和VS上都有诊断这些疾病的方法。您检查了要调试的模块的“符号加载信息”吗?(在VS中最简单的方法是右键单击模块窗口中的模块)。

根据对这些问题的任何综合答案,可以提出建议。如果你提供更多的细节,它可以帮助集中建议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3105086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档