2015-03-13 133 views
-1

我使用Visual Studio 2010在Windows 2008服务器计算机上构建我的32位应用程序文件。此32位应用程序将使用IBM wepshere MQ Client(7.5.0.3)。使用WinDbg查找执行代码

在调试模式时,出现异常运行时,所以我调试使用WinDbg的软件

转储信息被

******************************************************************************* 
*                    * 
*      Exception Analysis         * 
*                    * 
******************************************************************************* 

*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Program Files (x86)\IBM\WebSphere MQ\bin\mqe.dll - 


FAULTING_IP: 
ntdll32!RtlpCreateSplitBlock+47b 
77d23fcb 8b11   mov  edx,dword ptr [ecx] 

EXCEPTION_RECORD: ffffffffffffffff -- (.exr 0xffffffffffffffff) 
ExceptionAddress: 0000000077d23fcb (ntdll32!RtlpCreateSplitBlock+0x000000000000047b) 
    ExceptionCode: c0000005 (Access violation) 
    ExceptionFlags: 00000000 
NumberParameters: 2 
    Parameter[0]: 0000000000000000 
    Parameter[1]: 000000003b9ac9ff 
Attempt to read from address 000000003b9ac9ff 

CONTEXT: 0000000000000000 -- (.cxr 0x0;r) 
eax=0adaff08 ebx=02960000 ecx=3b9ac9ff edx=00100000 esi=0ae2bf90 edi=02960174 
eip=77d23fcb esp=079bd490 ebp=079bd4b4 iopl=0   nv up ei pl zr na pe nc 
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b    efl=00010246 
ntdll32!RtlpCreateSplitBlock+0x47b: 
77d23fcb 8b11   mov  edx,dword ptr [ecx] ds:002b:3b9ac9ff=???????? 

FAULTING_THREAD: 000000000000046c 

PROCESS_NAME: MessageBroker.exe 

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

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

EXCEPTION_PARAMETER1: 0000000000000000 

EXCEPTION_PARAMETER2: 000000003b9ac9ff 

READ_ADDRESS: 000000003b9ac9ff 

FOLLOWUP_IP: 
ntdll32!RtlpCreateSplitBlock+47b 
77d23fcb 8b11   mov  edx,dword ptr [ecx] 

NTGLOBALFLAG: 0 

APPLICATION_VERIFIER_FLAGS: 0 

APP: messagebroker.exe 

ANALYSIS_VERSION: 6.3.9600.17298 (debuggers(dbg).141024-1500) amd64fre 

**BUGCHECK_STR: APPLICATION_FAULT_INVALID_POINTER_READ_ZEROED_STACK** 

PRIMARY_PROBLEM_CLASS: INVALID_POINTER_READ 

DEFAULT_BUCKET_ID: INVALID_POINTER_READ 

LAST_CONTROL_TRANSFER: from 0000000077d23c5a to 0000000077d23fcb 

**STACK_TEXT:** 
079bd4b4 77d23c5a 0ae2bf90 0adaff08 02960150 ntdll32!RtlpCreateSplitBlock+0x47b 
079bd5a0 77d23cfe 00000840 00000848 0ae2b74a ntdll32!RtlpAllocateHeap+0xb5d 
079bd624 74e04d83 02960000 00000000 00000840 ntdll32!RtlAllocateHeap+0x23a 
079bd644 008a8894 00000840 00000002 079bd800 MSVCR80!malloc+0x7a 
**WARNING: Stack unwind information not available. Following frames may be wrong. 
00000000 00000000 00000000 00000000 00000000 mqe+0x68894** 


STACK_COMMAND: .cxr 0x0 ; kb 

SYMBOL_STACK_INDEX: 0 

SYMBOL_NAME: ntdll32!RtlpCreateSplitBlock+47b 

FOLLOWUP_NAME: MachineOwner 

MODULE_NAME: ntdll32 

IMAGE_NAME: ntdll32.dll 

DEBUG_FLR_IMAGE_TIMESTAMP: 51fb1072 

FAILURE_BUCKET_ID: INVALID_POINTER_READ_c0000005_ntdll32.dll!RtlpCreateSplitBlock 

**BUCKET_ID: X64_APPLICATION_FAULT_INVALID_POINTER_READ_ZEROED_STACK_ntdll32!RtlpCreateSplitBlock+47b** 

ANALYSIS_SOURCE: UM 

FAILURE_ID_HASH_STRING: um:invalid_pointer_read_c0000005_ntdll32.dll!rtlpcreatesplitblock 

FAILURE_ID_HASH: {c09c2d45-666c-6fbd-b6fd-d9b79ba8c4fa} 

以上转储表明Mqe.dll(IBM的WebSphere MQ DLL)在流逝无效指针

基于上面的转储,我无法找到问题。该堆栈调用非常小,所以我无法找到我的应用程序调用MQ应用程序(Mqe.ddl)的位置。

请教我如何找到问题以及如何调试Mqe.dll。

回答

4

MQE.dll在这里很可能是一个无辜的旁观者。它肯定是通过malloc分配内存,然后崩溃发生在内存管理器内部。这通常是过去某个时刻发生的内存损坏的结果。缓冲区溢出,下溢或免费使用是导致堆损坏的典型原因。

选项来帮助跟踪问题下来:

  1. 使用!heap -v在WinDbg中执行的转储堆分析。
  2. 分析内存管理器正在尝试工作的内存,您可以识别一些已知数据(例如字符串),这些数据可能会提示您谁损坏了内存。
    • 我会在程序集中向后走,并找出读取地址(0x3b9ac9ff)来自哪里。
    • 当前的寄存器也可能包含堆内坏指针,你也可以用这些指针作为调查的起点。
  3. 重新运行应用程序PageHeap尝试在发生时立即捕获溢出。
  4. 代码检查您的分配和任何堆内存的使用。
+1

此外,启用“应用程序验证”和任何与单词“堆”在gflags.exe(与windbg一起出货,并住在相同的文件夹作为它)的“图像文件”选项卡中的任何内容。您的exe名称将出现在该选项卡顶部的文本框中。 – 2015-03-13 19:01:03

+0

也做一个: kvn 999 也许你然后看到更多的堆栈,并可以看到 罪魁祸首马上。 NB也做!堆-v – 2015-03-13 19:53:07