サービス アプリケーションの自動デバッグ
デバッガーは、サービス アプリケーションの起動時に自動的に起動できます。 または、サービス アプリケーションで例外が発生したとき、または DebugBreak コマンドを実行したときに自動的に起動することもできます。 これらの方法のいずれかを選択している場合は、このトピックで続行する方法について説明します。 どの方法を選択するかがわからない場合は、「最善の方法の選択」を参照してください。
その後、次の手順に従います。
次のいずれかの準備手順に従います。
- 初期化コードを含め、最初からサービス アプリケーションをデバッグする予定の場合は、「初期化コードのデバッグの有効化」で説明されている手順に従います。 または、サービス アプリケーションがクラッシュしたとき、または例外が発生したときにデバッガーに割り込む場合は、「サービス アプリケーションがデバッガーに割り込めるようにする」で説明されている手順に従います。
- サービス アプリケーションがデバッガーが正常に実行されることを許可するようにするには、「サービス アプリケーションのタイムアウトの調整」で説明されている手順に従います。
- 単一の SvcHost プロセスでサービスが他のサービスと組み合わされている場合は、「サービスの分離」で説明されている手順に従います。
サービスが既に実行中の場合、これらの変更を有効にするには再起動が必要です。 実行中のサービスの影響を除去するために、Windows 自体を再起動することをお勧めします。 Windows を再起動しない場合は、以下のコマンドを使用します。ここで、ServiceName はサービスの名前です。
net stop ServiceName net start ServiceName
サービス アプリケーションの初期化コードをデバッグすることを選択している場合は、サービスの起動時にデバッガーが起動され、サービス アプリケーションにアタッチされます。
デバッガーが例外によってトリガーされることを選択している場合、サービス アプリケーションは、例外が発生するか DebugBreak 関数を実行するまで通常どおりに実行されます。 その時点でデバッガーが起動され、サービス アプリケーションにアタッチされます。
次の手順は、手順 1 の間に指定したデバッガー コマンド ラインによって異なります。
- リモート処理オプションなしでデバッガーを指定した場合、このデバッガーが起動され、そのウィンドウが表示されます。
- -server および -noio オプションを付けて NTSD を指定した場合、NTSD はコンソール ウィンドウなしで起動されます。 その後、-remote パラメーターを付けて任意のユーザー モード デバッガーを起動することで、別のコンピューターからデバッグ セッションに接続できます。 手順については、「デバッグ クライアントのアクティブ化」を参照してください。
- -d オプションを付けて NTSD を指定した場合は、コンソール ウィンドウなしで NTSD が起動されます。 その後、別のコンピューターで実行されているカーネル デバッガーを使用して、デバッグ セッションに接続できます。 手順については、「カーネルデバッガーからユーザー モード デバッガーを制御する」を参照してください。
- -ddefer および -server オプションを付けて NTSD を指定した場合、NTSD はコンソール ウィンドウなしで起動されます。 その後、カーネル デバッガーとユーザー モードのリモート デバッガーの両方を使用して、デバッグ セッションに接続できます。これは、サービスとは異なるコンピューターで実行されます (ただし、場合によっては、互いに同じコンピューター)。 手順については、「このメソッドをリモート デバッグと組み合わせる」を参照してください。
デバッガーが起動すると、サービスは最初のプロセス ブレークポイント、例外、または DebugBreak コマンドで一時停止します。 これにより、サービス アプリケーションの現在の状態を調べたり、ブレークポイントを設定したり、その他の必要な構成を選択したりできます。
g (実行) または別の実行コマンドを使用して、サービス アプリケーションの実行を再開します。