5

私のアプリケーションは、最初にデータベースからデータを読み取り、次にSFTPサーバーにアップロードするXMLドキュメントを作成します。

アプリケーションを実行すると、エラーが発生します。

VShost32.exe stopped working

アプリケーションをデバッグモードで実行してステップスルーすると、エラーがポップアップするポイントが見つかりますが、(ポップアップを閉じない限り)次のステップに進むことができます。次に、実行する必要のあるすべてが実行されます。全く問題ありません。

では、なぜこのエラーメッセージが表示されるのですか?何が原因なのかは完全に不明です。

また、どうすればそれを取り除くことができますか?

4

1 に答える 1

7

VSHost32.exe は、Visual Studio ホスティング プロセスです。デバッグを容易にする CLR のカスタム ホスト バージョンがあります。実際のプロセス名は yourapp.vshost.exe で、タスク マネージャーで実行されていることがわかります。

したがって、メッセージが実際に意味するのはプログラムがクラッシュしたことですが、デバッガーが識別できる方法ではありません。使用するライブラリが独自の管理されていないスレッドを開始し、そのスレッドが未処理の例外でクラッシュした場合、これは技術的に可能です。既定では、デバッガーは、マネージ コードによって開始されたスレッドで発生した例外のみを診断できます。

このクラッシュの後もデバッグを続行できるのは非常にまれであり、かなり不健康な可能性があります。これは、使用するライブラリが SetUnhandledExceptionFilter() を使用して独自の未処理の例外フィルターをインストールし、例外を飲み込む場合に技術的に可能です。ただし、ホスティング プロセスがそれを認識した後にそうします。これはかなり注目に値します。

アンマネージ デバッガーを有効にすると、これに関する診断が向上します。プロジェクト + プロパティの [デバッグ] タブで、[アンマネージ コードのデバッグを有効にする] オプションにチェックを入れます。次に、Debug + Exceptions で、Win32 Exceptions の Thrown チェックボックスをオンにします。クラッシュ シナリオを再現すると、例外がスローされたときにデバッガーが停止するはずです。ヒントについては、コール スタックを参照してください。クラッシュしたコードのデバッグ情報はおそらくないため、認識できるものはほとんど表示されません。しかし、うまくいけば、コードを含む DLL の名前によって、どのライブラリがこれを担当しているかがわかります。次に、ライブラリのベンダーに連絡して、詳細を尋ねます。

于 2013-01-17T18:17:40.943 に答える