C++ 从不同操作系统检索到的崩溃转储指向消息循环。如何从那里到达故障位置?(TeamViewer使我的流程崩溃。)

C++ 从不同操作系统检索到的崩溃转储指向消息循环。如何从那里到达故障位置?(TeamViewer使我的流程崩溃。),c++,visual-studio,debugging,mfc,crash-dumps,C++,Visual Studio,Debugging,Mfc,Crash Dumps,我们软件的一位客户抱怨说它在他的Windows XP机器上崩溃了。我请他下载并运行我们的流程,如下所示: procdump -e -ma -w myproc.exe 用户通过电子邮件向我发送了收集的崩溃转储.dmp文件 然后,我将该.dmp文件放在与进程的原始.exe图像文件以及.pdb文件相同的文件夹中,并通过Visual Studio 2010运行.dmp文件: 然后,当我单击“仅使用本机调试”时,VS显示了MFC消息循环函数的源代码以及DispatchMessage调用后的指针位置(请

我们软件的一位客户抱怨说它在他的Windows XP机器上崩溃了。我请他下载并运行我们的流程,如下所示:

procdump -e -ma -w myproc.exe
用户通过电子邮件向我发送了收集的崩溃转储
.dmp
文件

然后,我将该
.dmp
文件放在与进程的原始
.exe
图像文件以及
.pdb
文件相同的文件夹中,并通过Visual Studio 2010运行
.dmp
文件:

然后,当我单击“仅使用本机调试”时,VS显示了
MFC
消息循环函数的源代码以及
DispatchMessage
调用后的指针位置(请参见绿色箭头):

调用堆栈也没有多大帮助:

当我跳到报告的故障地址时,我什么也没有得到:

该应用程序是在
VS2008
中编译的,是一个基于对话框的C++/MFC应用程序

所以我正在检查
.dmp
文件的大小,它是26.6MB。里面有数据。我的问题是如何从中获得更多有用的信息,以帮助确定源代码中的错误位置

顺便说一句,我看到在Windows 8.1上运行此崩溃转储
.dmp
文件时,崩溃发生在Windows XP上。这就是我在堆栈跟踪中获取垃圾的原因吗

EDIT:如果我试图查看调用
DispatchMessage
的结构中的参数,我在反汇编程序中会得到以下结果:

另外,当我尝试在
pState
中查看值时,我会发现
符号未找到

编辑2:有关模块和加载到故障
EIP
地址的模块。
0x1963AB50
的内存插槽似乎未被任何模块占用:

编辑3:对不起,太长了。我最终在
WinDbg
中打开了崩溃转储,并做到了
!在其上分析-v
命令。这是输出。似乎丢失/卸载的DLL是
tv\u w32.DLL

Microsoft (R) Windows Debugger Version 10.0.10586.567 X86
Copyright (c) Microsoft Corporation. All rights reserved.


Loading Dump File [C:\Users\User\Desktop\Myproc\Release\Myproc.exe_160708_141237.dmp]
User Mini Dump File with Full Memory: Only application data is available

Comment: '
*** procdump -e -ma -w Myproc.exe
*** Unhandled exception: C0000005.ACCESS_VIOLATION'

************* Symbol Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*c:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
Symbol search path is: srv*c:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
Executable search path is: 
Windows XP Version 2600 (Service Pack 3) MP (2 procs) Free x86 compatible
Product: WinNt, suite: SingleUserTS
Machine Name:
Debug session time: Fri Jul  8 05:12:39.000 2016 (UTC - 7:00)
System Uptime: 9 days 6:05:50.960
Process Uptime: 3 days 5:08:52.000
.....................................
Loading unloaded module list
..
This dump file has an exception of interest stored in it.
The stored exception information can be accessed via .ecxr.
(ba4.4a4): Access violation - code c0000005 (first/second chance not available)
eax=00000001 ebx=00000002 ecx=7c92741c edx=7c98e174 esi=1963ab50 edi=1963ab50
eip=19608536 esp=0012ee3c ebp=0012ee5c iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
<Unloaded_tv_w32.dll>+0x8536:
19608536 ??              ???
0:000> .bugcheck
               ^ Syntax error in '.bugcheck'
0:000> !analyze -v
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************


DUMP_CLASS: 2

DUMP_QUALIFIER: 400

CONTEXT:  (.ecxr)
eax=00000001 ebx=00000002 ecx=7c92741c edx=7c98e174 esi=1963ab50 edi=1963ab50
eip=19608536 esp=0012ee3c ebp=0012ee5c iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
<Unloaded_tv_w32.dll>+0x8536:
19608536 ??              ???
Resetting default scope

FAULTING_IP: 
tv_w32!unloaded+8536
19608536 ??              ???

EXCEPTION_RECORD:  (.exr -1)
ExceptionAddress: 19608536 (<Unloaded_tv_w32.dll>+0x00008536)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000000
   Parameter[1]: 19608536
Attempt to read from address 19608536

DEFAULT_BUCKET_ID:  BAD_INSTRUCTION_PTR

PROCESS_NAME:  Myproc.exe

ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.

EXCEPTION_CODE_STR:  c0000005

EXCEPTION_PARAMETER1:  00000000

EXCEPTION_PARAMETER2:  19608536

READ_ADDRESS:  19608536 

FOLLOWUP_IP: 
tv_w32!unloaded+8536
19608536 ??              ???

FAILED_INSTRUCTION_ADDRESS: 
tv_w32!unloaded+8536
19608536 ??              ???

WATSON_BKT_PROCSTAMP:  576c0d97

WATSON_BKT_PROCVER:  1.5.16.0

PROCESS_VER_PRODUCT:  Myproc Name

WATSON_BKT_MODULE:  unknown

WATSON_BKT_MODVER:  0.0.0.0

WATSON_BKT_MODOFFSET:  19608536

MODLIST_WITH_TSCHKSUM_HASH:  8b7920bcb3af2eb1b97366fd0663a3798ab285ea

MODLIST_SHA1_HASH:  b5acbaed45de37ad3c73ee4478c8f6678e94eaa6

NTGLOBALFLAG:  0

APPLICATION_VERIFIER_FLAGS:  0

PRODUCT_TYPE:  1

SUITE_MASK:  272

DUMP_FLAGS:  3

DUMP_TYPE:  0

APP:  Myproc.exe

ANALYSIS_SESSION_HOST:  DESKTOP-ABC

ANALYSIS_SESSION_TIME:  07-08-2016 22:18:58.0444

ANALYSIS_VERSION: 10.0.10586.567 x86fre

IP_MODULE_UNLOADED: 
tv_w32!unloaded+8536
19608536 ??              ???

THREAD_ATTRIBUTES: 
OS_LOCALE:  DEU

PROBLEM_CLASSES: 



BAD_INSTRUCTION_PTR
    Tid    [0x4a4]
    Frame  [0x00]: tv_w32!unloaded



INVALID_POINTER_READ
    Tid    [0x4a4]
    Frame  [0x00]: tv_w32!unloaded


BUGCHECK_STR:  BAD_INSTRUCTION_PTR_INVALID_POINTER_READ

LAST_CONTROL_TRANSFER:  from 00000000 to 19608536

STACK_TEXT:  
0012ee38 00000000 19608648 ffff071b 00000000 <Unloaded_tv_w32.dll>+0x8536


THREAD_SHA1_HASH_MOD_FUNC:  0959aaead905d5402017a9de12facac3929f71c3

THREAD_SHA1_HASH_MOD_FUNC_OFFSET:  52f8c4ddebdd2e855f90e79f96f6fc29a470ad1d

THREAD_SHA1_HASH_MOD:  2e69fc2d39893b6d7d9991dcc4967479dbafb5c5

SYMBOL_STACK_INDEX:  0

SYMBOL_NAME:  tv_w32!unloaded+8536

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: tv_w32

IMAGE_NAME:  tv_w32.dll

DEBUG_FLR_IMAGE_TIMESTAMP:  573435d6

STACK_COMMAND:  .ecxr ; kb

FAILURE_BUCKET_ID:  BAD_INSTRUCTION_PTR_c0000005_tv_w32.dll!unloaded

BUCKET_ID:  BAD_INSTRUCTION_PTR_INVALID_POINTER_READ_UNLOADED_IP_tv_w32!unloaded+8536

PRIMARY_PROBLEM_CLASS:  BAD_INSTRUCTION_PTR_INVALID_POINTER_READ_UNLOADED_IP_tv_w32!unloaded+8536

BUCKET_ID_OFFSET:  8536

BUCKET_ID_MODULE_STR:  tv_w32

BUCKET_ID_MODTIMEDATESTAMP:  573435d6

BUCKET_ID_MODCHECKSUM:  45ff9

BUCKET_ID_MODVER_STR:  0.0.0.0

BUCKET_ID_PREFIX_STR:  BAD_INSTRUCTION_PTR_INVALID_POINTER_READ_UNLOADED_IP_

FAILURE_PROBLEM_CLASS:  BAD_INSTRUCTION_PTR

FAILURE_EXCEPTION_CODE:  c0000005

FAILURE_IMAGE_NAME:  tv_w32.dll

FAILURE_FUNCTION_NAME:  unloaded

BUCKET_ID_FUNCTION_STR:  unloaded

FAILURE_SYMBOL_NAME:  tv_w32.dll!unloaded

TARGET_TIME:  2016-07-08T12:12:39.000Z

OSBUILD:  2600

OSSERVICEPACK:  6532

SERVICEPACK_NUMBER: 6

OS_REVISION: 0

OSPLATFORM_TYPE:  x86

OSNAME:  Windows XP

OSEDITION:  Windows XP WinNt (Service Pack 3) SingleUserTS

USER_LCID:  0

OSBUILD_TIMESTAMP:  2014-03-12 03:48:40

ANALYSIS_SESSION_ELAPSED_TIME: e0a

ANALYSIS_SOURCE:  UM

FAILURE_ID_HASH_STRING:  um:bad_instruction_ptr_c0000005_tv_w32.dll!unloaded

FAILURE_ID_HASH:  {7c7c5a5b-462a-0301-1674-660f1336c576}

Followup:     MachineOwner
---------
Microsoft(R)Windows调试器版本10.0.10586.567 X86
版权所有(c)微软公司。版权所有。
正在加载转储文件[C:\Users\User\Desktop\Myproc\Release\Myproc.exe\u 160708\u 141237.dmp]
内存已满的用户小型转储文件:只有应用程序数据可用
评论:'
***procdump-e-ma-w Myproc.exe
***未处理的异常:C0000005。访问\u冲突'
*************符号路径验证摘要**************
响应时间(ms)位置
延迟的srv*c:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
符号搜索路径为:srv*c:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
可执行搜索路径为:
Windows XP版本2600(Service Pack 3)MP(2个进程)免费x86兼容
产品:WinNt,套件:SingleUsers
计算机名称:
调试会话时间:2016年7月8日星期五05:12:39.000(UTC-7:00)
系统正常运行时间:9天6:05:50.960
进程正常运行时间:3天5:08:52.000
.....................................
加载卸载模块列表
..
此转储文件中存储了感兴趣的异常。
存储的异常信息可以通过.ecxr访问。
(ba4.4a4):访问违规-代码c0000005(第一次/第二次机会不可用)
eax=00000001 ebx=00000002 ecx=7c92741c edx=7c98e174 esi=1963ab50 edi=1963ab50
eip=19608536 esp=0012ee3c ebp=0012ee5c iopl=0 nv向上ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
+0x8536:
19608536 ??              ???
0:000>。错误检查
^“.bugcheck”中的语法错误
0:000> !分析-v
*******************************************************************************
*                                                                             *
*异常分析*
*                                                                             *
*******************************************************************************
DUMP_类:2
DUMP_限定符:400
上下文:(.ecxr)
eax=00000001 ebx=00000002 ecx=7c92741c edx=7c98e174 esi=1963ab50 edi=1963ab50
eip=19608536 esp=0012ee3c ebp=0012ee5c iopl=0 nv向上ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
+0x8536:
19608536 ??              ???
重置默认范围
断层IP:
电视w32!卸载+8536
19608536 ??              ???
异常记录:(.exr-1)
例外地址:19608536(+0x00008536)
例外代码:c0000005(访问冲突)
例外标志:00000000
数字参数:2
参数[0]:00000000
参数[1]:19608536
尝试读取地址19608536
默认\u BUCKET\u ID:错误的\u指令\u PTR
进程名称:Myproc.exe
错误代码:(NTSTATUS)0xc0000005-0x%p处的指令引用了0x%p处的内存。内存不能是%s。
异常代码:(NTSTATUS)0xc0000005-0x%p处的指令引用了0x%p处的内存。内存不能是%s。
例外情况代码:c0000005
异常参数1:00000000
异常参数2:19608536
阅读地址:19608536
后续行动(IP):
电视w32!卸载+8536
19608536 ??              ???
失败的\u指令\u地址:
电视w32!卸载+8536
19608536 ??              ???
WATSON_BKT_程序戳记:576c0d97
沃森·布克特·普洛克弗:1.5.16.0
过程版本产品:Myproc名称
WATSON_BKT_模块:未知
沃森模式:0.0.0.0
WATSON_BKT_MODOFFSET:19608536
带TSCHKSUM散列的MODLIST_:8b7920bcb3af2eb1b97366fd0663a3798ab285ea
修改列表:b5acbaed45de37ad3c73ee4478c8f6678e94eaa6
NTGLOBALFLAG:0
应用程序\验证程序\标志:0
产品类型:1
套房:272
转储标志:3
转储类型:0
应用程序:Myproc.exe
分析会话主机:DESKTOP-ABC
分析时间:07-08-2016 22:18:5