Visual Studio で Just-In-Time デバッガーを使用してデバッグする
Just-In-Time デバッグは、Visual Studio の外部で実行中のアプリでエラーまたはクラッシュが発生したときに、Visual Studio を自動的に起動できます。 Just-In-Time デバッグを使用すると、Visual Studio の外部でアプリをテストでき、問題が発生したときに Visual Studio を開いてデバッグを開始できます。
Just-In-Time デバッグは、Windows デスクトップ アプリで使用できます。 ユニバーサル Windows アプリや、ビジュアライザーなどのネイティブ アプリケーションでホストされているマネージド コードでは機能しません。
ヒント
[Just-In-Time デバッガー] ダイアログ ボックスの表示を停止したいとき、Visual Studio がインストールされていない場合は、「Just-In-Time デバッガーを無効にする」を参照してください。 Visual Studio がインストールされていた場合は、Windows レジストリで Just-In-Time デバッグを無効にする必要があります。
Visual Studio で Just-In-Time デバッグを有効または無効にする
Just-In-Time デバッグは、Visual Studio の [ツール]>[オプション] (または [デバッグ]>[オプション]) ダイアログ ボックスで構成できます。
Note
Just-In-Time デバッグを有効または無効にするには、Visual Studio を管理者として実行している必要があります。 Just-In-Time デバッグを有効または無効にするとレジストリ キーが設定され、そのキーを変更するには管理者特権が必要になります。 管理者として Visual Studio を開くには、Visual Studio アプリを右クリックし、[管理者として実行] を選択します。
Just-In-Time デバッグの有効/無効を切り替えるには:
[ツール] または [デバッグ] メニューで、 [オプション]>[デバッグ]>[Just-In-Time] を選択します。
Note
Just-In-Time メニュー オプションが表示されない場合は、Visual Studio インストーラーを使用して Just-In-Time デバッガーがインストールされていることを確認します。
[このコードの種類の Just-In-Time デバッグを有効にする] ボックスで、Just-In-Time デバッグでデバッグするコードの種類を選択します。[マネージド]、[ネイティブ]、または [スクリプト]。
[OK] を選択します。
Just-In-Time デバッガーを有効にしたが、アプリのクラッシュやエラーの際に開かない場合は、「Just-In-Time デバッグのトラブルシューティング」を参照してください。
Windows レジストリで Just-In-Time デバッグを無効にする
Visual Studio がコンピューターにインストールされなくなった場合でも、Just-In-Time デバッグが有効になっている可能性があります。 Visual Studio がもうインストールされていない場合は、Windows レジストリを編集して Just-In-Time デバッグを無効にできます。
レジストリを編集して Just-In-Time デバッグを無効にするには:
Windows の [スタート] メニューで、レジストリ エディター (regedit.exe) を実行します。
[レジストリ エディター] ウィンドウで、次のレジストリ エントリを探して、存在する場合は削除します。
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
また、次のレジストリ エントリが存在する場合も削除します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
他のレジストリ キーを削除または変更しないようにしてください。
[レジストリ エディター] ウィンドウを閉じます。
Windows フォームの Just-In-Time デバッグを有効化する
Windows フォーム アプリには既定で最高レベルの例外ハンドラーがあり、回復可能であればアプリは実行し続けることができます。 Windows フォーム アプリが、ハンドルされない例外をスローすると、次のダイアログが表示されます。
標準の Windows フォーム エラー処理の代わりに Just-In-Time デバッグを有効にするには、次の設定を追加します。
machine.config または <app name>.exe.config ファイルの
system.windows.forms
セクションで、jitDebugging
値をtrue
に設定します。<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
さらに、C++ Windows フォーム アプリケーションでは、.config ファイルまたはコード内で
DebuggableAttribute
をtrue
に設定することも必要です。 /Zi を使用し、/Og は使用しないでコンパイルすると、コンパイラによってこの属性が設定されます。 ただし、最適化されていないリリース ビルドをデバッグする場合は、アプリの AssemblyInfo.cpp ファイルに次の行を追加して、DebuggableAttribute
を設定する必要があります:[assembly:System::Diagnostics::DebuggableAttribute(true, true)];
詳細については、DebuggableAttributeを参照してください。
Just-In-Time デバッグを使用する
この例では、アプリがエラーをスローした場合の Just-In-Time デバッグについて説明します。
これらのステップを実行するには、Visual Studio をインストールする必要があります。 Visual Studio をインストールしていない場合は、無料の Visual Studio Community エディションをダウンロードできます。
[ツール]>[オプション]>[デバッグ]>[Just-In-Time] で、Just-In-Time デバッグが有効になっていることを確認します。
この例では、NullReferenceException をスローする C# コンソール アプリを Visual Studio で作成します。
Visual Studio で、ThrowsNullExceptionという名前の C# コンソール アプリを作成します ([ファイル]>[新規作成]>[プロジェクト]>[Visual C#]>[コンソール アプリケーション])。 Visual Studio でのプロジェクトの作成の詳細については、シンプルなアプリケーションを作成するチュートリアルのページを参照してください。
プロジェクトが Visual Studio で開いたら、Program.cs ファイルを開きます。 Main() メソッドを次のコードで置き換えます。これは、行をコンソールに出力して、NullReferenceException をスローします。
static void Main(string[] args) { Console.WriteLine("we will now throw a NullReferenceException"); throw new NullReferenceException("this is the exception thrown by the console app"); }
ソリューションをビルドするには、[デバッグ] (既定) または [リリース] 構成を選択してから、[ビルド]>[ソリューションのリビルド] を選択します。
Note
- 完全なデバッグ エクスペリエンスのためには、[デバッグ] 構成を選択します。
- [リリース] 構成を選択する場合、この手順を行うためには [マイ コードのみ] をオフにする必要があります。 [ツール]>[オプション]>[デバッグ] で、[マイ コードのみを有効にする] を選択解除します。
ビルド構成の詳細については、「ビルド構成について」を参照してください。
C# プロジェクト フォルダー (...\ThrowsNullException\ThrowsNullException\bin\Debug または ...\ThrowsNullException\ThrowsNullException\bin\Release) にある、ビルドされたアプリ ThrowsNullException.exe を開きます。
次のコマンド ウィンドウが表示されます。
[Just-In-Time デバッガーを選択する] ダイアログが開きます。
[Available Debuggers](使用可能なデバッガー) で、[New instance of<your preferred Visual Studio version/edition>](<優先 Visual Studio バージョン/エディション> の新しいインスタンス)> を選択します (まだ選択されていない場合)。
[OK] を選択します。
ThrowsNullException プロジェクトが、Visual Studio の新しいインスタンスで開きます。例外をスローした行で実行が停止しています。
この時点でデバッグを開始できます。 実際のアプリをデバッグする場合は、コードが例外をスローする理由を確認する必要があります。
注意事項
アプリに信頼できないコードが含まれている場合は、[セキュリティ警告] ダイアログ ボックスが表示され、デバッグを続行するかどうかを決定できます。 デバッグを開始する前に、コードを信頼できるかどうかを判断します。 このコードは、自分で作成したコードですか。 アプリケーションをリモート コンピューター上で実行している場合、プロセスの名前を識別できますか。 アプリがローカルで実行している場合は、悪意のあるコードがコンピューター上で実行されている可能性も考慮してください。 コードが信頼できると判断した場合は、[OK]を選択します。 それ以外の場合、 [キャンセル] を選択します。
Just-In-Time デバッグのトラブルシューティング
Visual Studio で有効になっている場合でも、アプリがクラッシュしたときに Just-In-Time デバッグが開始されない場合:
Windows の既知の問題により、Just-In-Time デバッガーが失敗する可能性があります。
解決するには、次のレジストリ キーに [自動] の [DWORD 値] を [値のデータ] を 1 として追加します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
(64 ビット コンピューター上の 32 ビット アプリの場合) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
Windows エラー報告が、コンピューター上でエラー処理を引き継いだ可能性があります。
この問題を解決するには、レジストリ エディターを使用し、次のレジストリ キーに [無効] の [DWORD 値] を [値のデータ] を 1 として追加します。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting
(64 ビット コンピューター上の 32 ビット アプリの場合) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows エラー報告
詳細については、「WER 設定」を参照してください。
Just-In-Time デバッグの際に次のエラー メッセージが表示されることがあります。
クラッシュ プロセスにアタッチできません。 指定されたプログラムは、Windows または MS-DOS プログラムではありません。
デバッガーが、別のユーザーで実行されているプロセスにアタッチしようとしました。
この問題を回避するには、Visual Studio で [デバッグ]>[プロセスにアタッチ] を開き (または、Ctrl + Alt + P を押して)、[選択可能なプロセス] の一覧でデバッグするプロセスを見つけます。 プロセスの名前がわからない場合は、Visual Studio Just-In-Time デバッガー ダイアログでプロセス ID を見つけます。 そのプロセスを [選択可能なプロセス]の一覧から選択し、[アタッチ] を選択します。 [いいえ] を選択して、[Just-In-Time デバッガー] ダイアログを閉じます。
ログオンしているユーザーがいないため、デバッガーを開始できませんでした。
コンソールにログオンしているユーザーはいないため、Just-In-Time デバッグ ダイアログを表示するユーザー セッションはありません。
この問題を解決するには、コンピューターにログオンします。
クラスは登録されていません。
デバッガーは、おそらくインストールの問題が原因で登録されていない COM クラスを作成しようとしました。
この問題を解決するには、Visual Studio インストーラーを使って Visual Studio を再インストールするか、既存のインストールを修復します。