次の方法で共有


サービス アプリケーションの自動デバッグ

デバッガーは、サービス アプリケーションの起動時に自動的に起動できます。 または、サービス アプリケーションで例外が発生したとき、または DebugBreak コマンドを実行したときに自動的に起動することもできます。 これらの方法のいずれかを選択している場合は、このトピックで続行する方法について説明します。 どの方法を選択するかがわからない場合は、「最善の方法の選択」を参照してください。

その後、次の手順に従います。

  1. 次のいずれかの準備手順に従います。

  2. サービスが既に実行中の場合、これらの変更を有効にするには再起動が必要です。 実行中のサービスの影響を除去するために、Windows 自体を再起動することをお勧めします。 Windows を再起動しない場合は、以下のコマンドを使用します。ここで、ServiceName はサービスの名前です。

    net stop ServiceName 
    net start ServiceName 
    
  3. サービス アプリケーションの初期化コードをデバッグすることを選択している場合は、サービスの起動時にデバッガーが起動され、サービス アプリケーションにアタッチされます。

    デバッガーが例外によってトリガーされることを選択している場合、サービス アプリケーションは、例外が発生するか DebugBreak 関数を実行するまで通常どおりに実行されます。 その時点でデバッガーが起動され、サービス アプリケーションにアタッチされます。

  4. 次の手順は、手順 1 の間に指定したデバッガー コマンド ラインによって異なります。

    • リモート処理オプションなしでデバッガーを指定した場合、このデバッガーが起動され、そのウィンドウが表示されます。
    • -server および -noio オプションを付けて NTSD を指定した場合、NTSD はコンソール ウィンドウなしで起動されます。 その後、-remote パラメーターを付けて任意のユーザー モード デバッガーを起動することで、別のコンピューターからデバッグ セッションに接続できます。 手順については、「デバッグ クライアントのアクティブ化」を参照してください。
    • -d オプションを付けて NTSD を指定した場合は、コンソール ウィンドウなしで NTSD が起動されます。 その後、別のコンピューターで実行されているカーネル デバッガーを使用して、デバッグ セッションに接続できます。 手順については、「カーネルデバッガーからユーザー モード デバッガーを制御する」を参照してください。
    • -ddefer および -server オプションを付けて NTSD を指定した場合、NTSD はコンソール ウィンドウなしで起動されます。 その後、カーネル デバッガーとユーザー モードのリモート デバッガーの両方を使用して、デバッグ セッションに接続できます。これは、サービスとは異なるコンピューターで実行されます (ただし、場合によっては、互いに同じコンピューター)。 手順については、「このメソッドをリモート デバッグと組み合わせる」を参照してください。
  5. デバッガーが起動すると、サービスは最初のプロセス ブレークポイント、例外、または DebugBreak コマンドで一時停止します。 これにより、サービス アプリケーションの現在の状態を調べたり、ブレークポイントを設定したり、その他の必要な構成を選択したりできます。

  6. g (実行) または別の実行コマンドを使用して、サービス アプリケーションの実行を再開します。

関連項目

DebugBreak 関数