2015-03-13 40 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