0

多数のDLL(数十程度)で構成された大規模なレガシーVBアプリがあり、すべてが単一のCOM+サーバーアプリケーションにインストールされています。時々、dllhost.exeがキールオーバー(そして自動的に再起動)する何かが起こり、このメッセージがWindowsアプリケーションイベントログに残されます...

システムがカスタムコンポーネントを呼び出しましたが、そのコンポーネントに障害が発生し、例外が生成されました。これは、カスタムコンポーネントに問題があることを示しています。このコンポーネントの開発者に障害が発生したことを通知し、以下の情報を提供してください。
サーバーアプリケーションID:{8CC02F18-2733-4A17-9E5C-1A70CB6B6977}
サーバーアプリケーションインスタンスID:{1940A147-8A5E-45FA-86FE-DAF92A822597}
サーバーアプリケーション名:MyTestApp
このエラーの深刻な性質により、プロセスが終了しました。
例外:C0000005
アドレス:0x758DA3DA

ソース:Complus
イベントID:4786
レベル:エラー

これと並んで、特にdllhost.exeに関する別のログがあります...

障害のあるアプリケーション名:dllhost.exe、バージョン:6.0.6000.16386、タイムスタンプ:0x4549b14e障害のある
モジュール名:msvcrt.dll、バージョン:7.0.6002.18005、タイムスタンプ:0x49e0379e
例外コード:0xc0000005
障害オフセット:0x0000a3da障害の
あるプロセスID:0x83c
障害アプリケーションの開始時刻:0x01cb50c507ee0166障害のある
アプリケーションパス:%11障害のある
モジュールパス:%12
レポートID:%13

Cランタイム(msvcrt)で障害のフラグが立てられていることはわかっていますが、理想的には、これをmsvcrtに呼び出されたDLLにトレースバックする必要があります(おそらくデータ/パラメーターが正しくありません)。それで、デバッガーをインストールせずに、これを引き起こすDLLを特定する方法はありますか?オフラインで分析するために使用できる場所にメモリダンプがあるかどうかを確認しようとしています。したがって、アドレスを特定のものに関連付けます。しかし、それがなければ、それが可能かどうかはわかりません。ホストされているアプリケーションがクラッシュしたときにミニダンプを生成するようにCOMサブシステムに指示できますか?(はい、可能です[おそらく]-[ダンプ]タブにチェックボックスがあります)。

これは、Windows Server 2008 R1 32ビットにあります(ただし、Server 2003にも関心があります)。

アプリの可用性には影響しません。COM+は単にdllhostを再起動してアプリケーションを続行しますが、修正するのに役立つ不便です。

編集さて、私はクラッシュダンプを持っています、私はwindbgを持っています、しかしそれは助けにはなりません。私が太っている(可能性がある)か何か他のものかわからない:-)の出力!analyze -vは以下ですが、FAULTING_IPを解決できていないように見えますが、DLLに何も表示されていませんか?次にどこを向いたらいいのかわからない。

私のpdbのいずれかが危険であり、新しいものを生成する価値があるかどうか疑問に思っています-Microsoftのシンボルサーバーに接続されているので、そうではないはずですが、(明らかに)どのモジュールが(BUGCHECK_STRとPRIMARY_PROBLEM_CLASS)の間違ったシンボルを報告しているかはわかりません)(または、コードが最初に実行されていたサーバー上のこれらのシンボルですか?)PDBをサーバー自体に配置する方がよいでしょうか?

そうでない場合、他のアイデアはありますか?私は以前にwindbgを簡単に使用したことがありますが、私はそれを定期的に使用しているわけではないので、深く掘り下げるために入力する必要のある呪文が他にもあるでしょうか。ガイダンス歓迎:-)

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

FAULTING_IP: 
+5c112faf02e0d82c
00000000 ??              ???

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

FAULTING_THREAD:  00000f1c
DEFAULT_BUCKET_ID:  WRONG_SYMBOLS
PROCESS_NAME:  dllhost.exe
ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION}  Breakpoint  A breakpoint has been reached.
EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid
MOD_LIST: <ANALYSIS/>
NTGLOBALFLAG:  0
APPLICATION_VERIFIER_FLAGS:  0
MANAGED_STACK: !dumpstack -EE
OS Thread Id: 0xf1c (0)
Current frame: 
ChildEBP RetAddr  Caller,Callee

LAST_CONTROL_TRANSFER:  from 77b15620 to 77b15e74
PRIMARY_PROBLEM_CLASS:  WRONG_SYMBOLS
BUGCHECK_STR:  APPLICATION_FAULT_WRONG_SYMBOLS

STACK_TEXT:  
0022fa68 77b15620 77429884 00000064 00000000 ntdll!KiFastSystemCallRet
0022fa6c 77429884 00000064 00000000 00000000 ntdll!NtWaitForSingleObject+0xc
0022fadc 774297f2 00000064 ffffffff 00000000 kernel32!WaitForSingleObjectEx+0xbe
0022faf0 778e2c44 00000064 ffffffff 00e42374 kernel32!WaitForSingleObject+0x12
0022fb0c 778e2e32 00060848 0022fb5b 00000000 ole32!CSurrogateProcessActivator::WaitForSurrogateTimeout+0x55
0022fb24 00e413a4 0022fb40 00000000 00061d98 ole32!CoRegisterSurrogateEx+0x1e9
0022fcb0 00e41570 00e40000 00000000 00061d98 dllhost!WinMain+0xf2
0022fd40 7742d0e9 7ffde000 0022fd8c 77af19bb dllhost!_initterm_e+0x1a1
0022fd4c 77af19bb 7ffde000 dc2ccd29 00000000 kernel32!BaseThreadInitThunk+0xe
0022fd8c 77af198e 00e416e6 7ffde000 ffffffff ntdll!__RtlUserThreadStart+0x23
0022fda4 00000000 00e416e6 7ffde000 00000000 ntdll!_RtlUserThreadStart+0x1b

STACK_COMMAND:  .cxr 00000000 ; kb ; dt ntdll!LdrpLastDllInitializer BaseDllName ; dt ntdll!LdrpFailureData ; ~0s; .ecxr ; kb

FOLLOWUP_IP: 
dllhost!WinMain+f2
00e413a4 ff15a410e400    call    dword ptr [dllhost!_imp__CoUninitialize (00e410a4)]

SYMBOL_STACK_INDEX:  6
SYMBOL_NAME:  dllhost!WinMain+f2
FOLLOWUP_NAME:  MachineOwner
MODULE_NAME: dllhost
IMAGE_NAME:  dllhost.exe
DEBUG_FLR_IMAGE_TIMESTAMP:  4549b14e
FAILURE_BUCKET_ID:  WRONG_SYMBOLS_80000003_dllhost.exe!WinMain
BUCKET_ID:  APPLICATION_FAULT_WRONG_SYMBOLS_dllhost!WinMain+f2
4

2 に答える 2

1

VB dll のシンボルはありますか? コール スタックを取得するには、シンボルが重要です。正しい記号があることを願っています。を使用ld *して、lmewindbg 内で一致しなかったシンボルのリストを取得する必要があります。また、MS シンボルとカスタム コードのシンボル パスを設定します。_NT_SYMBOL_PATH

最も簡単なオプションの 1 つは、DebugDiag内にダンプをロードすることです。これにより、コール スタックと共に失敗の理由が示されます。DebugDiag には、Complus 用のデバッガ拡張機能があります。

そして、これはすべてのスレッドのネイティブコールスタックへのコマンドです

~*ek

そして、これは現在の例外に切り替えます

.ecxr
于 2010-09-22T14:10:42.563 に答える
0

この問題をトラブルシューティングするには、Mon / WinDbg をデバッグするのが最善の方法です。winDbg のモジュール リストまたは lm コマンドを使用して、ロードされたモジュールを一覧表示できるはずです。スタック トレースは、関連する DLL を示します。これは、プロセス/dll のシンボルがなくても可能です。

于 2010-09-23T21:21:05.910 に答える