Just-In-Time デバッグ

Just-In-Time デバッグは、Visual Studio の外部で実行中のアプリケーションで例外またはクラッシュが発生したときに、Visual Studio を自動的に起動します。これにより、Visual Studio が実行されていないときにアプリケーションをテストし、問題が発生したときに Visual Studio を使用したデバッグを開始できます。

Just-In-Time デバッグは、Windows ストア apps には使用できません。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 デバッグを開始するには

  1. [Just-In-Time デバッグ] ダイアログ ボックスで、[利用可能なデバッガ] の一覧で、をクリック [Visual Studio 2012 の新しいインスタンス] または既に実行されている Visual Studio のインスタンスをクリックします。

  2. すべての将来のクラッシュのために Visual Studio を自動的に使用するには、**[既定値として現在選択されているデバッガーを設定します]**をクリックします。

  3. デバッグできるコードの種類を選択するには、[デバッグ エンジンを手動で選択する] をクリックします。このオプションを選択しないと、プログラムのコードの種類に応じて、適切なデバッグ エンジンが自動的に選択されます。

  4. [OK] をクリックします。

  5. 信頼関係のないコードを使用したアセンブリがアプリケーションに含まれている場合、セキュリティ警告に関するダイアログ ボックスが表示されます。このダイアログ ボックスでは、デバッグを開始するかどうかを選択できます。デバッグを開始する前に、コードを信頼できるかどうかを判断します。このコードは、自分で作成したコードですか。このコードの作成者は信頼できますか。アプリケーションをリモート コンピューター上で実行している場合、プロセスの名前を識別できますか。アプリケーションをローカルに実行している場合でも、それが必ずしもコードを信頼できることにはなりません。たとえば、Internet Explorer で悪意のある ActiveX コントロールが実行されていることがあります。このような悪意のあるコードがコンピューター上で実行されている可能性も考慮してください。デバッグしようとしているコードが信頼できると判断した場合は、[デバッグ] をクリックします。それ以外の場合は、[Don't Debug] (デバッグしない) をクリックします。

Just-In-Time デバッグの有効化/無効化

Just-In-Time デバッグは、[オプション] ダイアログ ボックスを使用して有効または無効にできます。

Just-In-Time デバッグの有効/無効を切り替えるには

  1. [ツール] メニューの [オプション] をクリックします。

  2. [オプション] ダイアログ ボックスで、[デバッグ] フォルダーをクリックします。

  3. [デバッグ] フォルダーで、[Just-In-Time] ページを選択します。

  4. [このコードの種類の Just-In-Time デバッグを有効にする] ボックスで、関連するプログラムの種類 ([マネージ][ネイティブ]、または [スクリプト]) をクリックし、選択または選択の解除を行います。

    Just-In-Time デバッグを有効にした後で無効に切り替えるには、管理者特権で実行する必要があります。Just-In-Time デバッグを有効にするとレジストリ キーが設定され、そのキーを変更するには管理者特権が必要になります。

  5. [OK] をクリックします。

既定では、Windows フォーム アプリケーションには、プログラムが正常な状態に戻れば続行できるように、トップ レベルの例外ハンドラーが用意されています。したがって、Windows フォーム アプリケーションの Just-In-Time デバッグを有効にするには、次の追加手順を実行する必要があります。

Windows フォームの Just-In-Time デバッグを有効化するには

  1. machine.config ファイルまたは application.exe.config ファイルの system.windows.form セクションの jitDebugging 値を true に設定します。

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  2. さらに、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 デバッグを無効にするには

  1. で、メニューの [開始] の検索および実行 regedit.exe

  2. [レジストリ エディター] ウィンドウで、次のレジストリ キーを検索し、削除します。

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

  3. コンピューターで 64 ビット オペレーティング システムを実行している場合は、次のレジストリ キーも削除します。

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger

  4. 誤って他のレジストリ キーを削除または変更しないように注意してください。

  5. [レジストリ エディター] ウィンドウを閉じます。

Just-In-Time デバッグのエラー

Just-In-Time デバッグに関連して次のエラー メッセージが表示されることがあります。

  • **<プログラム> でハンドルされていない Win32 の例外が発生しました。**この例外の Just-In-Time デバッグに失敗し、次のエラーが発生しました: ログインしているユーザーには、クラッシュしたアプリケーションのデバッグへのアクセスがありません。

    このメッセージは、適切なアクセス許可を持っていないために Just-In-Time デバッグが失敗したことを意味します。必要なアクセス許可の詳細については、「Remote Debugging Permissions」を参照してください。

  • クラッシュ プロセスにアタッチできません。指定されたプログラムは、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] ([オプション] ダイアログ ボックス - [デバッグ])

セキュリティ警告: 信頼されていないユーザーが所有するプロセスにアタッチするには危険が伴います。以下の情報に関して疑わしい点がある場合や、不明な場合は、このプロセスにアタッチしないでください。

概念

デバッガーのセキュリティ

その他の技術情報

デバッガーのロードマップ