1

我有!analyze -hang -v一个转储文件的以下结果。我看到线程 0 正在等待某个句柄被释放,如derived_wait_chain. 如何获得有关此句柄的更多信息?!handle 784.183c返回错误...

0:000> !analyze -hang -v
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************


FAULTING_IP: 
+0
00000000 ??              ???

EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 00000000
   ExceptionCode: 80000007 (Wake debugger)
  ExceptionFlags: 00000000
NumberParameters: 0

CONTEXT:  00000000 -- (.cxr 0x0;r)
eax=00000000 ebx=00000000 ecx=00000007 edx=00000000 esi=00000003 edi=00000003
eip=7725ca2c esp=0018edc4 ebp=0018ef4c iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
ntdll!NtWaitForMultipleObjects+0xc:
7725ca2c c21400          ret     14h

BUGCHECK_STR:  HANG

PROCESS_NAME:  scktsrvr.exe

ERROR_CODE: (NTSTATUS) 0xcfffffff - <Unable to get error code text>

EXCEPTION_CODE: (NTSTATUS) 0xcfffffff - <Unable to get error code text>

NTGLOBALFLAG:  0

APPLICATION_VERIFIER_FLAGS:  0

APP:  scktsrvr.exe

ANALYSIS_VERSION: 6.3.9600.17029 (debuggers(dbg).140219-1702) x86fre

DERIVED_WAIT_CHAIN:  

Dl Eid Cid     WaitType
-- --- ------- --------------------------
   0   784.183c Handle                 

WAIT_CHAIN_COMMAND:  ~0s;k;;

BLOCKING_THREAD:  0000183c

DEFAULT_BUCKET_ID:  APPLICATION_HANG_HungIn_ExceptionHandler

PRIMARY_PROBLEM_CLASS:  APPLICATION_HANG_HungIn_ExceptionHandler

PRIMARY_PROBLEM_CLASS_DATA:  .exr 0x18f558 / .cxr 0x18f5a8

LAST_CONTROL_TRANSFER:  from 7534112f to 7725ca2c

FAULTING_THREAD:  00000000

STACK_TEXT:  
0018edc0 7534112f 00000003 0018ef90 00000001 ntdll!NtWaitForMultipleObjects+0xc
0018ef4c 75817b89 00000003 0018ef90 00000000 KERNELBASE!WaitForMultipleObjectsEx+0xcc
0018ef68 758707bf 00000003 0018ef90 00000000 kernel32!WaitForMultipleObjects+0x19
0018f3a8 75870295 00000000 00000001 00000000 kernel32!WerpReportFaultInternal+0x50b
0018f3b8 75851709 0018f44c 753ef705 0018f45c kernel32!WerpReportFault+0x74
0018f3c0 753ef705 0018f45c 00000001 5931c527 kernel32!BasepReportFault+0x19
0018f44c 00403764 0018f45c 772600b1 0018f558 KERNELBASE!UnhandledExceptionFilter+0x1f4
WARNING: Stack unwind information not available. Following frames may be wrong.
0018f478 77260083 0018f558 0018ff74 0018f5a8 scktsrvr+0x3764
0018f540 772607ff 0018f558 0018f5a8 0018f558 ntdll!ExecuteHandler+0x24
0018f540 75344598 0018f558 0018f5a8 0018f558 ntdll!KiUserExceptionDispatcher+0xf
0018f8e8 0046f881 0eedfade 00000001 00000007 KERNELBASE!RaiseException+0x48
0018fefc 0046f987 0018ff4c 0018ff14 0046fa00 scktsrvr+0x6f881
0018ff4c 0046f502 00470bd4 7ffde000 00470ce3 scktsrvr+0x6f987
0018ff80 75817c04 7ffde000 75817be0 599eeb0a scktsrvr+0x6f502
0018ff94 7727ad1f 7ffde000 5b3cddf8 00000000 kernel32!BaseThreadInitThunk+0x24
0018ffdc 7727acea ffffffff 7726024e 00000000 ntdll!__RtlUserThreadStart+0x2f
0018ffec 00000000 00470bd4 7ffde000 00000000 ntdll!_RtlUserThreadStart+0x1b


FOLLOWUP_IP: 
scktsrvr+3764
00403764 83f800          cmp     eax,0

SYMBOL_STACK_INDEX:  7

SYMBOL_NAME:  scktsrvr+3764

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: scktsrvr

IMAGE_NAME:  scktsrvr.exe

DEBUG_FLR_IMAGE_TIMESTAMP:  2a425e19

STACK_COMMAND:  ~0s ; kb

BUCKET_ID:  HANG_scktsrvr+3764

FAILURE_BUCKET_ID:  APPLICATION_HANG_HungIn_ExceptionHandler_cfffffff_scktsrvr.exe!Unknown

ANALYSIS_SOURCE:  UM

FAILURE_ID_HASH_STRING:  um:application_hang_hungin_exceptionhandler_cfffffff_scktsrvr.exe!unknown

FAILURE_ID_HASH:  {45df6cc2-89e8-d20a-efde-b2365e4d9c6c}

Followup: MachineOwner
---------
4

1 回答 1

1

784是进程 ID (PID),183c是等待线程的线程 ID (TID)。要获取有关它正在等待的句柄的更多信息,请切换到线程并获取带有参数的调用堆栈(kb在 32 位上)。这将使您调用WaitForMultipleObjects()或调用WaitForSingleObject()参数,您将获得它等待的句柄。

在您的情况下,堆栈被列为以下内容的一部分!analyze

STACK_TEXT:  
0018edc0 7534112f 00000003 0018ef90 00000001 ntdll!NtWaitForMultipleObjects+0xc
0018ef4c 75817b89 00000003 0018ef90 00000000 KERNELBASE!WaitForMultipleObjectsEx+0xcc
0018ef68 758707bf 00000003 0018ef90 00000000 kernel32!WaitForMultipleObjects+0x19

看着MSDN,它说

DWORD WINAPI WaitForMultipleObjects(
  _In_       DWORD  nCount,
  _In_ const HANDLE *lpHandles,
  _In_       BOOL   bWaitAll,
  _In_       DWORD  dwMilliseconds
);

因此,该线程等待 3 个句柄,并且在地址处0018ef90有 3 个句柄,您可以使用!handle.

然而,真正的问题似乎只是隐藏在 Windows 的“向 Microsoft 发送错误报告”功能背后。

从参数 to ntdll!KiUserExceptionDispatcher(),即异常记录和异常上下文中,您可以了解更多有关原始异常的信息。正如@deemok 所提到的,.exr 0x18f558应该.cxr 0x18f5a8会提供更多信息。

从参数到KERNELBASE!RaiseException(),异常代码是0x0eedfade,这是典型的 Delphi 应用程序。Marc Durdin有一篇关于使用 WinDbg 分析 Delphi 异常的好文章。

于 2015-08-07T20:18:45.927 回答