5

ProcDumpで作成したクラッシュダンプから意味のある情報を取得するのに苦労していますが、それは私が経験している一見ランダムなクラッシュに関連していると確信しています。

Windows764ビットで実行されているVB6アプリケーションがあります。ときどきクラッシュし、エラーログにntdll.dllの障害となるエントリが残りますが、それ以上の情報は提供されません。そのため、SysInternalsのProcDumpを実行してプロセスを実行し、クラッシュダンプを自動的に作成しました。

クラッシュを社内で再現することができなかったので、ダンプがあったとしても、問題が何であるかを教えてくれると確信していました。ただし、1日のほとんどを実行した後、プログラムはまだ正常に実行されていますが、ProcDumpはすでにいくつかのダンプを書き込んでいることがわかります。ntdll.dllの問題を指摘しているようですが、どこから修正を適用すればよいかわかりません。

ダンプの1つで実行!analyze -vすると、次のようになります。

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


FAULTING_IP: 
+0
00000000 ??              ???

EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 00000000
   ExceptionCode: 80000003 (Break instruction exception)
  ExceptionFlags: 00000000
NumberParameters: 0

FAULTING_THREAD:  000007c8

PROCESS_NAME:  application.exe

ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION}  Breakpoint  A breakpoint has been reached.

EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid

NTGLOBALFLAG:  0

APPLICATION_VERIFIER_FLAGS:  0

APP:  application.exe

BUGCHECK_STR:  APPLICATION_FAULT_STATUS_BREAKPOINT_AFTER_CALL

PRIMARY_PROBLEM_CLASS:  STATUS_BREAKPOINT_AFTER_CALL

DEFAULT_BUCKET_ID:  STATUS_BREAKPOINT_AFTER_CALL

LAST_CONTROL_TRANSFER:  from 7754431f to 7752014d

STACK_TEXT:  
0382fdf4 7754431f 00000005 035e62c8 00000001 ntdll!ZwWaitForMultipleObjects+0x15
0382ff88 74cd339a 00000000 0382ffd4 77539ed2 ntdll!TppWaiterpThread+0x33d
0382ff94 77539ed2 035e6298 74e2a30c 00000000 kernel32!BaseThreadInitThunk+0xe
0382ffd4 77539ea5 775441f3 035e6298 00000000 ntdll!__RtlUserThreadStart+0x70
0382ffec 00000000 775441f3 035e6298 00000000 ntdll!_RtlUserThreadStart+0x1b


STACK_COMMAND:  ~0s; .ecxr ; kb

FOLLOWUP_IP: 
ntdll!ZwWaitForMultipleObjects+15
7752014d 83c404          add     esp,4

SYMBOL_STACK_INDEX:  0

SYMBOL_NAME:  ntdll!ZwWaitForMultipleObjects+15

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: ntdll

IMAGE_NAME:  ntdll.dll

DEBUG_FLR_IMAGE_TIMESTAMP:  4ce7ba58

FAILURE_BUCKET_ID:  STATUS_BREAKPOINT_AFTER_CALL_80000003_ntdll.dll!ZwWaitForMultipleObjects

BUCKET_ID:  APPLICATION_FAULT_STATUS_BREAKPOINT_AFTER_CALL_ntdll!ZwWaitForMultipleObjects+15

WATSON_STAGEONE_URL:  http://watson.microsoft.com/StageOne/BlackJack_exe/1_5_0_0/50227d4e/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1

Followup: MachineOwner

このエントリの意味を理解するという観点から、誰かが私を正しい方向に向けることができますか、そしてそれについて私は何ができますか?

4

1 に答える 1

7

念のため、私は自分の側でいくつかのテストを実行し、正常なプロセスにアタッチして、開始したばかりのプロセスのダンプを作成しました。!analyze -vの出力は、私の出力がより冗長であるという事実を除いて、すべての場合であなたの出力と非常に似ていましたが、デバッガーのバージョンに依存すると思います。

たとえば、ペイントを開始したばかりにアタッチした後に得られる出力は次のとおりです。

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

GetPageUrlData failed, server returned HTTP status 404
URL requested:     http://watson.microsoft.com/StageOne/mspaint_exe/6_1_7600_16385/4a5bca29/ntdll_dll/6_1_7601_17725/4ec4aa8e/80000003/00050530.htm?Retriage=1

FAULTING_IP: 
ntdll!DbgBreakPoint+0
00000000`76d90530 cc              int     3

EXCEPTION_RECORD:  ffffffffffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 0000000076d90530 (ntdll!DbgBreakPoint)
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 1
Parameter[0]: 0000000000000000

FAULTING_THREAD:  0000000000000cbc

DEFAULT_BUCKET_ID:  STATUS_BREAKPOINT

PROCESS_NAME:  mspaint.exe

ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION}  Breakpoint  A breakpoint has been reached.

EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid

EXCEPTION_PARAMETER1:  0000000000000000

MOD_LIST: <ANALYSIS/>

NTGLOBALFLAG:  0

APPLICATION_VERIFIER_FLAGS:  0

PRIMARY_PROBLEM_CLASS:  STATUS_BREAKPOINT

BUGCHECK_STR:  APPLICATION_FAULT_STATUS_BREAKPOINT

LAST_CONTROL_TRANSFER:  from 0000000076e37ef8 to 0000000076d90530

STACK_TEXT:  


FOLLOWUP_IP: 
ntdll!DbgBreakPoint+0
00000000`76d90530 cc              int     3

SYMBOL_STACK_INDEX:  0

SYMBOL_NAME:  ntdll!DbgBreakPoint+0

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: ntdll

IMAGE_NAME:  ntdll.dll

DEBUG_FLR_IMAGE_TIMESTAMP:  4ec4aa8e

STACK_COMMAND:  ~8s ; kb

FAILURE_BUCKET_ID:  STATUS_BREAKPOINT_80000003_ntdll.dll!DbgBreakPoint

BUCKET_ID:  X64_APPLICATION_FAULT_STATUS_BREAKPOINT_ntdll!DbgBreakPoint+0

WATSON_STAGEONE_URL:      http://watson.microsoft.com/StageOne/mspaint_exe/6_1_7600_16385/4a5bca29/ntdll_dll/6_1_7601_17725/4ec4aa8e/80000003/00050530.htm?Retriage=1

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

また、ここでProcDumpフラグの説明も確認しました:http ://technet.microsoft.com/en-us/sysinternals/dd996900.aspx 。次のようなコマンドラインを使用しているように見えます

C:\apps\procdump.exe -accepteula -e -h -n 10 -t -w application.exe

メモリ使用量やCPU使用率などの特定のパラメータを設定せずに、ハングまたは例外の兆候があるたびにprocdumpを停止します。

ダンプをいつ作成するかを説明するルールを構成できる優れたUIを提供するDebugDiagを使用することをお勧めします。これが私からの説明です。過度のメモリ使用量の問題がある場合、またはCPU使用率が高い場合にダンプを収集する方法は次のとおりです。

http://kate-butenko.blogspot.com/2012/06/how-to-gather-dump-with-debugdiag.html

そして、ここに別の素晴らしいスクリーンショットベースの説明があります。特定の例外のためにDebugDiagでダンプを取得する方法です。

http://blogs.msdn.com/b/kaushal/archive/2012/05/09/using-debugdiag-to-capture-a-dump-on-first-chance-exception.aspx

より軽量なツールのセットから、AdPlusツール(C:\ Program Files \ Debugging Tools for Windows(x64)フォルダーにあります)を確認することもできます。特定の種類の例外をキャッチできるので、私はDebugDiagを好みます。

于 2012-08-10T12:23:50.287 に答える