3

私のwinformsアプリケーションでは、ランダムに次の例外が発生します。

Application: My.Shell.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG ByRef)
   at System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr, Int32, Int32)
   at System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)
   at System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)
   at System.Windows.Forms.Application.Run(System.Windows.Forms.Form)
   at Microsoft.Practices.CompositeUI.WinForms.FormShellApplication`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Start()
   at Microsoft.Practices.CompositeUI.CabApplication`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Run()
   at My.Shell.ModuleLoader.Main() 

スタック トレースは、Windows イベント ビューアーからのものでした。(取り消されていない例外ハンドラーはそれを取得しませんでした。)

SOでこれに関する多くの記事を読みました:

私のアプリケーションのどこかで、ネイティブ メソッドを介して破棄または破損したメモリにアクセスしていることが判明しました。私の質問は、タスクマネージャーで作成したクラッシュダンプを使用してその場所を見つける方法です。原因を見つけるための他の戦略はありますか?

4

3 に答える 3

0

最後に、Microsoft の「Debug Diagnostic Tool」というすばらしいツールを使用しました。CodeProjectの詳細を見る

「デバッグ診断ツール (DebugDiag) は、ハング、パフォーマンスの低下、メモリ リークや断片化、ユーザー モード プロセスでのクラッシュなどの問題のトラブルシューティングを支援するように設計されています。」(microsoft.com) DebugDiag ツールは、デバッグ用の他のツールに比べてはるかに簡単に使用できます。

このツールは、特定のプロセスを自動的に監視し、ダンプファイルを選択可能なフォルダーに保存します。とても便利 ;-)

于 2015-02-10T09:24:27.520 に答える
0

おそらく、SOS を使用して最初の未処理の例外で中断し、そこから移動すると役立つでしょう。

必要に応じて、デバッガーを動的に起動することもできます。「System.Diagnostics」を参照してください。

これにより、例外の発生を引き起こした、または発生させた条件の概要を把握し、デバッガーがアタッチされている間にエラーが発生するのを待たずに追跡することができます。

于 2015-02-06T13:56:53.557 に答える