0

C#/COM/C++ アプリケーションがクラッシュしており、デバッグの助けが必要です。gflags を有効にして WinDbg をアタッチして実行したところ、クラッシュの原因はアクセス違反であると判断されましたが、それ以上に絞り込むことはできませんでした。すべてのマシンで問題が発生しているわけではありません。問題を頻繁に再現しているように見えるマシンがいくつかありますが、決定論的ではありません。私たちは、単純にアプリケーションから切り替えて (Alt-Tab など)、元に戻しただけでアプリケーションがクラッシュすることを確認しました。WinDbg からの出力は以下のとおりです。

問題を引き起こしている可能性のあるコードの領域を体系的にコメントアウトしようとしてきましたが、まだあまり成功していません。

どのデバッグ手順またはツールを試す必要があるかについて何か提案はありますか?

!分析 -v

EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff) ExceptionAddress: 1a584ff2 (+0x1a584ff1)
ExceptionCode: c0000005 (アクセス違反) ExceptionFlags: 00000000 NumberParameters: 2 Parameter[0]: 00000000 Parameter[1]: 1a584ff2 アドレス 1a584ff4 からの読み取りを試行

PROCESS_NAME: ProcessFiles.exe

ERROR_CODE: (NTSTATUS) 0xc0000005 - 0x%08lx の命令が 0x%08lx のメモリを参照しました。メモリを %s にすることはできません。

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - 0x%08lx の命令が 0x%08lx のメモリを参照しました。メモリを %s にすることはできません。

EXCEPTION_PARAMETER1: 00000000

EXCEPTION_PARAMETER2: 1a584ff2

READ_ADDRESS: 1a584ff2

FOLLOWUP_IP: Ed20+1a584ff1 1a584ff2 ?? ???

NTGLOBALFLAG: 2000000

APPLICATION_VERIFIER_FLAGS: 0

IP_MODULE_UNLOADED: Ed20+1a584ff1 1a584ff2 ?? ???

MANAGED_STACK: (TransitionMU) 0EC6F6F4 7B1D8CCE System_Windows_Forms_ni!System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32, Int32, Int32)+0x24e 0EC6F790 7B1D8937 System_Windows_Forms_ni.Application.Windows. +ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)+0x177 0EC6F7E4 7B1D8781 System_Windows_Forms_ni!System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)+0x61 0EC6F814 7B195911 System_Windows_Forms_ni!System .Windows.Forms.Application.Run(System.Windows.Forms.Form)+0x31 0EC6F828 0969D97A Extract_Utilities_Forms!Extract.Utilities.Forms.VerificationForm`1[[System.__Canon, mscorlib]].A(System.Object)+0x23a 0EC6F8C0 79A00EEE mscorlib_ni!システム。 Threading.ThreadHelper.ThreadStart(System.Object)+0x4a (TransitionUM)

LAST_CONTROL_TRANSFER: 7e418734 から 1a584ff2 へ

FAULTING_THREAD: ffffffff

ADDITIONAL_DEBUG_TEXT: スレッド:[e30] のフレーム:[0] からの属性 [ip_not_executable] に基づくフォローアップ セット

BUGCHECK_STR: APPLICATION_FAULT_BAD_INSTRUCTION_PTR_INVALID_POINTER_READ_WRONG_SYMBOLS_WINDOW_HOOK

PRIMARY_PROBLEM_CLASS: BAD_INSTRUCTION_PTR

DEFAULT_BUCKET_ID: BAD_INSTRUCTION_PTR

STACK_TEXT: 7b1d8cce System_Windows_Forms_ni!System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop+0xc 7b1d8937 System_Windows_Forms_ni!System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner+0x0 7b1d8781 System_Windows_Forms_ni!System.Windows .Forms.Application+ThreadContext.RunMessageLoop+0x0 7b195911 System_Windows_Forms_ni!System.Windows.Forms.Application.Run+0x31 0969d97a Extract_Utilities_Forms!Extract.Utilities.Forms.VerificationForm`1[[System.__Canon, mscorlib]].A+0x23a 79a00eee mscorlib_ni!System.Threading.ThreadHelper.ThreadStart_Context+0x72a25e 792e019f mscorlib_ni!System.Threading.ExecutionContext.Run+0x6f 797db48a mscorlib_ni!System.Threading.ThreadHelper.ThreadStart+0x4a

STACK_COMMAND: .ecxr ; ~~[e30]; .frame 0; ** 疑似コンテキスト ** ; キロバイト

FAILED_INSTRUCTION_ADDRESS: Ed20+1a584ff1 1a584ff2 ??
???

SYMBOL_NAME: Ed20

FOLLOWUP_NAME: MachineOwner

MODULE_NAME: Ed20

IMAGE_NAME: Ed20

DEBUG_FLR_IMAGE_TIMESTAMP: 0

FAILURE_BUCKET_ID: BAD_INSTRUCTION_PTR_c0000005_Ed20!アンロード

BUCKET_ID: APPLICATION_FAULT_BAD_INSTRUCTION_PTR_INVALID_POINTER_READ_WRONG_SYMBOLS_WINDOW_HOOK_BAD_IP_Ed20

フォローアップ: MachineOwner

4

2 に答える 2

3

かなり頻繁にクラッシュを再現するコンピューターを見つけて、そのコンピューターに WinDbg をインストールします。次にwindbg.exe -I、 を実行します。これにより、WinDbg が事後分析クラッシュ ハンドラーになります。

クラッシュが発生するまで待ちます。その場合、WinDbg はクラッシュの時点で自動的に開きます。kpnスタック トレースを取得するには、WinDbg コマンドを使用します。(マシン上にもシンボルがあることを確認する必要がある場合があります。)

于 2010-04-16T18:37:10.953 に答える
0

返信ありがとうございます。

ソフトウェアの最後のバージョン (クラッシュしなかった) 以降のすべてのコード変更を評価することで、最終的に問題を発見しました。原因は、テキスト コントロールの OnLostFocus オーバーライドで HideSelection が false に設定されていたことです。この投稿によると、それは悪いことを引き起こします (とにかく、一部のマシンでは)。

于 2010-04-16T22:50:37.487 に答える