Just-In-Time デバッグ
更新 : 2010 年 7 月
このトピックの内容は、次の製品に該当します。
エディション |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
|||||
Pro、Premium、Ultimate |
Just-In-Time デバッグは、Visual Studio の外部で実行中のアプリケーションで例外またはクラッシュが発生したときに、Visual Studio を自動的に起動します。 これにより、Visual Studio が実行されていないときにアプリケーションをテストし、問題が発生したときに Visual Studio を使用したデバッグを開始できます。
Just-In-Time デバッグは、ビジュアライザーなどのネイティブ アプリケーションでホストされるマネージ コードには使用できません。 .NET Framework を Windows Server 2003 または Windows 2000 SP3 以降にインストールした場合、コンピューターを再起動しない限り、Just-In-Time デバッグはターミナル サービス セッションの制限されたユーザー アカウントで実行されるプロセスでは使用できません。
Just-In-Time デバッグの使用
Visual Studio をインストールすると、Just-In-Time デバッグは既定で有効になります。 Just-In-Time デバッグを無効にしたり再び有効にしたりする方法については、「Just-In-Time デバッグの有効化/無効化」を参照してください。
Just-In-Time デバッグが有効な場合、Visual Studio の外部でアプリケーションをテストできます。 クラッシュまたは例外が発生すると、次のようなメッセージがダイアログ ボックスに表示されます。
ハンドルされていない例外 ('System.TypeInitializationException') が terrarium.exe[3384] で発生しました。
このダイアログ ボックスが表示された場合は、次の手順でデバッグを開始できます。
エラーが発生したときに Just-In-Time デバッグを開始するには
[Just-In-Time デバッグ] ダイアログ ボックスの [利用可能なデバッガー] ボックスの一覧で、[New instance of Visual Studio 2010] (Visual Studio 2010 の新しいインスタンス) をクリックするか、または既に実行中の Visual Studio 2010 のインスタンスをクリックします。
今後クラッシュが発生した場合に常に Visual Studio を自動的に使用するには、[現在選択されているデバッガーを既定のデバッガーに設定する] をクリックします。
デバッグできるコードの種類を選択するには、[デバッグ エンジンを手動で選択する] をクリックします。 このオプションを選択しないと、プログラムのコードの種類に応じて、適切なデバッグ エンジンが自動的に選択されます。
[OK] をクリックします。
信頼関係のないコードを使用したアセンブリがアプリケーションに含まれている場合、セキュリティ警告に関するダイアログ ボックスが表示されます。 このダイアログ ボックスでは、デバッグを開始するかどうかを選択できます。 デバッグを開始する前に、コードを信頼できるかどうかを判断します。 このコードは、自分で作成したコードですか。 このコードの作成者は信頼できますか。 アプリケーションをリモート コンピューター上で実行している場合、プロセスの名前を識別できますか。 アプリケーションをローカルに実行している場合でも、それが必ずしもコードを信頼できることにはなりません。 たとえば、Internet Explorer で悪意のある ActiveX コントロールが実行されていることがあります。 このような悪意のあるコードがコンピューター上で実行されている可能性も考慮してください。 デバッグしようとしているコードが信頼できると判断した場合は、[デバッグ] をクリックします。 それ以外の場合は、[Don't Debug] (デバッグしない) をクリックします。
Just-In-Time デバッグの有効化/無効化
Just-In-Time デバッグは、[オプション] ダイアログ ボックスを使用して有効または無効にできます。
Just-In-Time デバッグの有効/無効を切り替えるには
[ツール] メニューの [オプション] をクリックします。
[オプション] ダイアログ ボックスで、[デバッグ] フォルダーをクリックします。
[デバッグ] フォルダーで、[Just-In-Time] ページを選択します。
[このコードの種類の Just-In-Time デバッグを有効にする] ボックスで、関連するプログラムの種類 ([マネージ]、[ネイティブ]、または [スクリプト]) をクリックし、選択または選択の解除を行います。
Just-In-Time デバッグを有効にした後で無効に切り替えるには、管理者特権で実行する必要があります。 Just-In-Time デバッグを有効にするとレジストリ キーが設定され、そのキーを変更するには管理者特権が必要になります。
[OK] をクリックします。
既定では、Windows フォーム アプリケーションには、プログラムが正常な状態に戻れば続行できるように、トップ レベルの例外ハンドラーが用意されています。 したがって、Windows フォーム アプリケーションの Just-In-Time デバッグを有効にするには、次の追加手順を実行する必要があります。
Windows フォームの Just-In-Time デバッグを有効化するには
machine.config ファイルまたは application.exe.config ファイルの system.windows.form セクションの jitDebugging 値を true に設定します。
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
さらに、C++ Windows フォーム アプリケーションでは、.config ファイルまたはコード内で DebuggableAttribute も設定する必要があります。 /Zi を使用し、/Og を使用せずにコンパイルすると、コンパイラによってこの属性が設定されます。 ただし、最適化されていないリリース ビルドをデバッグする場合は、この属性を自分で設定する必要があります。 そのためには、アプリケーションの AssemblyInfo.cpp ファイルに次の行を追加します。
[assembly:System::Diagnostics::DebuggableAttribute(true, true)];
詳細については、「DebuggableAttribute」を参照してください。
Visual Studio がコンピューターからアンインストールされた後でも、Just-In-Time デバッグが有効になっている場合があります。 Visual Studio がインストールされていないと、Visual Studio の [オプション] ダイアログ ボックスから Just-In-Time デバッグを無効にすることはできません。 その場合は、Windows レジストリを編集して Just-In-Time デバッグを無効にできます。
レジストリを編集して Just-In-Time デバッグを無効にするには
[スタート] メニューの [ファイル名を指定して実行] をクリックします。
[ファイル名を指定して実行] ダイアログ ボックスで「regedit」と入力し、[OK] をクリックします。
[レジストリ エディター] ウィンドウで、次のレジストリ キーを検索し、削除します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
コンピューターで 64 ビット オペレーティング システムを実行している場合は、次のレジストリ キーも削除します。
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
誤って他のレジストリ キーを削除または変更しないように注意してください。
[レジストリ エディター] ウィンドウを閉じます。
Just-In-Time デバッグのエラー
Just-In-Time デバッグに関連して次のエラー メッセージが表示されることがあります。
<プログラム> でハンドルされていない Win32 の例外が発生しました。 この例外の Just-In-Time デバッグに失敗し、次のエラーが発生しました: ログインしているユーザーには、クラッシュしたアプリケーションのデバッグへのアクセスがありません。
このメッセージは、適切なアクセス許可を持っていないために Just-In-Time デバッグが失敗したことを意味します。 必要なアクセス許可の詳細については、「リモート デバッグのアクセス許可」を参照してください。
クラッシュ プロセスにアタッチできません。 指定されたプログラムは、Windows または MS-DOS プログラムではありません。
このエラーは、Windows 2000 上で別のユーザーとして実行しているプロセスにアタッチしようとすると発生します。
この問題を解決するには、Visual Studio を起動します。次に、[デバッグ] メニューから [プロセスにアタッチ] ダイアログ ボックスを開き、[選択可能なプロセス] ボックスの一覧からデバッグするプロセスを探します。 目的のプロセスの名前がわからない場合は、[Visual Studio Just-In-Time デバッガー] ダイアログで、プロセス ID を確認します。 そのプロセスを [選択可能なプロセス] ボックスの一覧から選択し、[アタッチ] をクリックします。 [Visual Studio Just-In-Time デバッガー] ダイアログの [いいえ] をクリックして、ダイアログ ボックスを閉じます。
ログオンしているユーザーがいないため、デバッガーを開始できませんでした。
このエラーは、コンソールにログオンしているユーザーがいないコンピューターで Just-In-Time デバッグが Visual Studio を起動しようとしたときに発生します。 ログオンしているユーザーがいないため、[Just-In-Time デバッグ] ダイアログ ボックスを表示するためのユーザー セッションがありません。
この問題を解決するには、コンピューターにログオンします。
クラスは登録されていません。
このエラーは、おそらくインストールの問題が原因で登録されていない COM クラスをデバッガーが作成しようとしたことを示します。
この問題を解決するには、セットアップ ディスクを使って Visual Studio を再インストールするか、既存のインストールを修復します。
参照
参照
Just-In-Time, Debugging, Options Dialog Box
概念
その他の技術情報
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2010 年 7 月 |
発見可能性を向上させるために、情報を 1 つのトピックにまとめました。 |
カスタマー フィードバック |
2010 年 8 月 |
廃止されたエラー メッセージの記述を削除しました。 |
カスタマー フィードバック |