次の方法で共有


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 デバッグを有効または無効にする

Visual Studio で Just-In-Time デバッガーを使用する場合、デバッガーの構成オプションには[ツール]、[>]、[デバッグ>オプション] メニューからアクセスできます。 Just-In-Time デバッガーは、インストーラーの [個々のコンポーネント>デバッグとテスト ] セクションで使用できます。

Just-In-Time デバッグを有効または無効にするには、管理者として Visual Studio を実行している必要があります。 Just-In-Time デバッグを有効または無効にすると、レジストリ キーが設定され、キーを変更するには管理者特権が必要になる場合があります。 管理者として Visual Studio を開くには、Visual Studio アプリを右クリックし、[ 管理者として実行] を選択します。

Just-In-Time デバッグを有効または無効にするには:

  1. [ツール>オプション] ウィンドウで、[>Debugging>General] セクションを展開します。

  2. 右側のウィンドウで、[ Just-In-Time デバッグの構成 ] リンクを選択します。

    Visual Studio で Just-In-Time デバッグを構成する方法を示すスクリーンショット。

  3. [Visual Studio デバッガー オプション] ダイアログで、これらの種類のコード に対して [Just-In-Time デバッグを有効にする] オプションを構成します。 Just-In-Time デバッグでデバッグするコードの種類 ( マネージド (.NET Framework) または ネイティブ) を選択します。

  4. [OK] を選択.

  1. [ ツール>オプション ] ダイアログで、[ デバッグ>Just-In-Time ] セクションを展開します。

  2. [これらの種類のコードに対して Just-In-Time デバッグを有効にする] ボックスで、Just-In-Time デバッグでデバッグするコードの種類 (マネージドネイティブスクリプト) を選択します。

    JIT デバッグを有効または無効にする

  3. [OK] を選択.

Just-In-Time デバッガーを有効にしても、アプリのクラッシュやエラーが発生しても開かない場合は、「 Just-In-Time デバッグのトラブルシューティング」を参照してください。

Windows レジストリから Just-In-Time デバッグを無効にする

Visual Studio がコンピュータにインストールされていない場合でも、ジャストインタイムデバッグが有効になっている可能性があります。 Visual Studio がインストールされなくなった場合は、Windows レジストリを編集して Just-In-Time デバッグを無効にすることができます。

Just-In-Time デバッグを無効にするには、レジストリを編集します。

  1. Windows の [スタート] メニューから、 レジストリ エディター (regedit.exe) を実行します。

  2. レジストリ エディター ウィンドウで、次のレジストリ エントリが存在する場合は、次のレジストリ エントリを見つけて削除します。

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

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

    JIT レジストリ キー

  3. また、次のレジストリ エントリが存在する場合は削除します。

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

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

    他のレジストリ キーを削除または変更しないでください。

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

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

既定では、Windows フォーム アプリには最上位の例外ハンドラーがあり、アプリは回復可能であれば実行を続けることができます。 Windows Forms アプリが未処理の例外をスローすると、次のダイアログが表示されます。

Windows フォームのハンドルされない例外

標準の Windows フォーム エラー処理ではなく Just-In-Time デバッグを有効にするには、次の設定を追加します。

  • machine.configまたは system.windows.forms< ファイルの > セクションで、jitDebuggingの値を true に設定します。

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  • C++ Windows フォーム アプリケーションでは、DebuggableAttributeを.configファイルまたはコードで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 Edition をダウンロードできます。

  • Just-In-Time デバッグが有効になっていることを確認するには、[ツール>] の下にある [これらの種類のコードに対して Just-In-Time デバッグを有効にする] オプションを構成します。

この例では、 NullReferenceException をスローする C# コンソール アプリを Visual Studio で作成します。

  1. Visual Studio で、ThrowsNullException という名前の C# コンソール アプリ (>>>>Console Application) を作成します。 Visual Studio でのプロジェクトの作成の詳細については、「 チュートリアル: 単純なアプリケーションを作成する」を参照してください。

  2. 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");
    }
    
  3. ソリューションをビルドするには、デバッグ (既定) またはリリース構成のいずれかを選択し、ビルド>ソリューションのビルドを選択します。

    • 完全なデバッグ エクスペリエンスを実現するには、 デバッグ 構成を選択します。

    • リリース構成を選択した場合、この手順を機能させるには、[マイ コードのみ] をオフにする必要があります。

      [ツール>オプション] ウィンドウで、[>Debugging>General] セクションを展開し、[マイ コードのみを有効にする] チェック ボックスをオフにします。

      [ツール>オプション] ダイアログで、[デバッグ>] セクション展開し、[マイ コードのみを有効にする] チェック ボックスをオフにします。

      このオプションの選択を解除すると、[ デバッグの開始時にユーザー コードがない場合に警告する (管理のみ)] オプションが自動的に無効になります。

    ビルド構成の詳細については、「 ビルド構成について」を参照してください。

  4. ビルドされたアプリ ThrowsNullException.exe を C# プロジェクト フォルダー (...\ThrowsNullException\ThrowsNullException\bin\Debug または ...\ThrowsNullException\ThrowsNullException\bin\Release) で開きます。

    次のコマンド ウィンドウが表示されます。

    ThrowsNullException.exe のコンソールのスクリーンショット。これはハンドルされない null 参照例外 (System.NullReferenceException) をスローします。

  5. [ Just-In-Time デバッガーの選択 ] ダイアログ ボックスが開きます。

    [Just-In-Time Debugger の選択] ダイアログ ボックスのスクリーンショット。例外が ThrowsNullException.exe コンソール ウィンドウに表示された後に表示されます。

    [使用可能なデバッガー] で、<優先する Visual Studio のバージョン/エディション>の新しいインスタンスを選択します (まだ選択されていない場合)。

  6. [OK] を選択.

    ThrowsNullException プロジェクトが Visual Studio の新しいインスタンスで開き、例外をスローした行で実行が停止します。

    Visual Studio の ThrowsNullException プロジェクトのスクリーンショット。例外をスローしたソース コード行が強調表示されています。

この時点でデバッグを開始できます。 実際のアプリをデバッグする場合は、コードが例外を発生させる理由を特定する必要があります。

注意事項

アプリに信頼されていないコードが含まれている場合は、セキュリティ警告ダイアログ ボックスが表示され、デバッグを続行するかどうかを決定できます。 デバッグを続行する前に、コードを信頼するかどうかを決定します。 自分でコードを記述しましたか? アプリケーションがリモート コンピューターで実行されている場合、プロセスの名前は認識されますか? アプリがローカルで実行されている場合は、コンピューターで悪意のあるコードが実行されている可能性を検討してください。 コードが信頼できると判断した場合は、[ OK] を選択します。 それ以外の場合は、[ キャンセル] を選択します。

Just-In-Time デバッグのトラブルシューティング

Visual Studio で有効になっているにもかかわらず、アプリがクラッシュしたときに Just-In-Time デバッグが開始されない場合:

  • Windows の既知の問題により、Just-In-Time デバッガーが失敗する可能性があります。

    次のレジストリキーに、Auto という DWORD Value を追加し、値データ1 に設定します。

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

    • (64 ビット コンピューター上の 32 ビット アプリの場合) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

  • Windows エラー報告によって、コンピューター上のエラー処理が引き継がれる可能性があります。

    この問題を解決するには、レジストリ エディターを使用して、次のレジストリ キーに、Disabled という DWORD 値 を追加し、値データとして 1 を設定します。

    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting

    • (64 ビット コンピューター上の 32 ビット アプリの場合) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting

    詳細については、「 ..」を参照してください。WER の設定

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

  • クラッシュプロセスにアタッチできません。 指定したプログラムが Windows プログラムまたは MS-DOS プログラムではありません。

    デバッガーが別のユーザーの下で実行されているプロセスにアタッチしようとしました。

    この問題を回避するには、Visual Studio で Debug>Attach to Process (または Ctrl + + キーを押して) 開き、[使用可能なプロセス] の一覧でデバッグするプロセスを見つけます。 プロセスの名前がわからない場合は、 Visual Studio の [Just-In-Time Debugger ] ダイアログでプロセス ID を見つけます。 [ 使用可能な プロセス] ボックスの一覧でプロセスを選択し、[アタッチ] を選択 します。 [ いいえ ] を選択すると、[Just-In-Time デバッガー] ダイアログが閉じます。

  • ユーザーがログオンしていないため、デバッガーを起動できませんでした。

    コンソールにログオンしているユーザーはいないため、[Just-In-Time デバッグ] ダイアログを表示するユーザー セッションはありません。

    この問題を解決するには、コンピューターにログオンします。

  • クラスが登録されていません。

    デバッガーは、おそらくインストールの問題が原因で登録されていない COM クラスを作成しようとしました。

    この問題を解決するには、Visual Studio インストーラーを使用して、Visual Studio のインストールを再インストールまたは修復します。