2012-01-17 27 views
0

現在、COM DLLに定義されているオブジェクトを処理するVB.netプログラムで作業しています。 問題は、そのオブジェクトによってクラッシュが発生することがあることです。「Try Catch」で処理できない例外がスローされ、Visual Studioでデバッグを求めるダイアログが表示されます。 このアプリケーションをのみ無効にします。 クラッシュの場合には、他のすべての.Netアプリケーションでこのダイアログが表示されます。 さて、私はVisual Studio 2008を使用します。1つのアプリケーションのVisual Studioデバッガを無効にする方法

+1

から取得できます。まず、AppDomain.CurrentDomain.UnhandledExceptionイベントを購読します。これは、COMサーバーによって開始されたネイティブスレッドでエラーが発生した場合でも、例外をキャッチしないことがあります。その後、ネイティブコードSetUnhandledExceptionFilter()を記述する必要があります。正しいbtwを得るためにかなり難しい、最高の回避。このダイアログでは、お客様のマシンにデバッガオプションは提供されません。 –

+0

ありがとう、ハンス。 AppDomain.CurrentDomain.UnhandledExceptionイベントのサブスクリプションは既に実装されており、この場合は機能しません。私はネイティブコードを書くことは私を気に入らないだろうと認めなければなりません:私は実際に私の場合にこれを実装する方法を知りません。 .Netでの私の経験は貧弱で、C/C++での私の経験は悪いです。 –

+0

私が書いたように、これはネイティブコードを書く必要があり、少し過度のものになるので、Hansの提案をあきらめました。私は私のVBコードでWin32 API関数SetUnhandledExceptionFilter()を呼び出そうとしましたが、うまくいきませんでした。 –

答えて

1

私は最終的にHans 'one(コメントを参照)以外のアプローチを選択しました。カスタムプログラムをデバッガの代わりにデバッガとして使用するためのレジストリの設定。そのプログラム( "DebuggerCaller.exe"と呼ぶ)をDr Watson(または他の登録されたデバッガ)にリダイレクトするか、クラッシュしたプロセスの名前の後にダンプファイルまたはログを自動的に作成します。あなたはこのアプリケーションがにHKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft.NETFramework \ DbgManagedDebuggerで、レジストリで定義されます

KEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\DbgJITDebugLaunchSetting = 2 

レジストリに設定を必要とする管理アプリケーション

の場合

クラッシュの場合に呼び出される。これは存在しないか、16(デフォルト)と等しくなる可能性があります。 Visual StudioとそのJITデバッガがインストールされているマシンで 、値は次のとおりです。

HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\DbgManagedDebugger 
= "c:\WINDOWS\system32\vsjitdebugger.exe" PID %d APPDOM %d EXTEXT "%s" EVTHDL %d 

とエルス

HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\DbgManagedDebugger 
= "MyDebugCaller.exe" PID %d APPDOM %d EXTEXT "%s" EVTHDL %d 

のようなものに置き換える必要があり、エントリが存在しないかではないかもしれない

HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\DbgManagedDebugger 
= "drwtsn32.exe" -p %ld -e %ld 

HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\DbgManagedDebugger 
= "*MyDebugCaller.exe*" -p %ld -e %ld 
のようなものに置き換える必要があります

私たちのdebuuggerがそれら(特にPID)を使用してプロセス名を決定し、ログを作成し、必要に応じて別のデバッガに転送できるように、引数は変更されません。ネイティブアプリケーションの場合

手順は非常に類似しています。 最初に定義されたネイティブアプリケーションのデバッガが

のVisual Studioがインストールされている場合、その値は、一般的にdrwtsn32.exe" -p %ld -e %ldまたは"c:\WINDOWS\system32\vsjitdebugger.exe" -p %ld -e %ldある
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger 

ある

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Auto 
= 1 

エントリキーを設定します。 それはこのようにSTHに変更する必要があります。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger 
= "*MyDebugCaller.exe*" -p %ld -e %ld 

私は、これは明らかだった願っています。 jitデバッガの設定に関する情報は、http://msdn.microsoft.com/en-us/library/2ac5yxx6%28v=vs.90%29.aspx

関連する問題