Windows OS のライブ デバックがしたい（事前準備）

みなさんも１年に何回かは、Windows OS をライブ デバックしたくなるときがあると思います。そんなときに読んでほしい、ライブ デバッグするために必要な設定をまとめました。

ライブ デバッグは、ネットワーク、USB、シリアルケーブルといった手段がありますが、今回は、デバッグしたい Windows OS が稼働している端末へネットワーク越しにライブ デバッグする方法をご紹介します。

なお、NIC (Network Interface Card) がデバッグに対応していないとダメなので、どの端末でもライブデバッグが可能というわけではない点には注意が必要です。ネットワーク越しにライブ デバッグできないときは、USB やシリアルケーブルを使用してライブデバッグの検討が必要です。

## 環境
どの Windows OS でも同様です。

## ライブ デバッグとは
ライブ デバッグ (Live Debugging) とは、プログラムやシステムが実行中の状態で、その動作をリアルタイムで調査・分析する技術や調査手法を指します。

システムやプロセスが実際に動作している間に、開発者やエンジニアがコードの動作を観察し、問題が発生する状況を把握して修正を行うことができます。

## 事前準備
### Debugger（デバッグする人）
#### Step1. WinDbg インストール
以下の Web サイトに記載されている手順で、デバッグに使用するツールである WinDbg を Windows 10 または Windows 11 の端末へインストールします。

https://qiita.com/ausamayuni/items/968bb331a333c63481f3

#### Step2. IP アドレスの確認
Debuggee 側の設定では、Debugger の IP アドレスを指定する必要があります。IP アドレスは、コマンドプロンプトまたは PowerShell から ipconfig コマンドにより表示できますので、Debugger の IP アドレスを確認しておきます。なお、デバッグ作業期間中は、IP アドレスを固定しておいたほうがいいですので、手動で IP アドレスを設定しておくのもありです。

![ipconfig_ip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853334/2a1f4e86-0ce6-59f3-993f-ad121add65aa.png)

### Debuggee（デバッグされる人）
#### Step1. セキュア ブートの無効化
ライブ デバッグを実行するには、セキュア ブートを無効にする必要があります。無効にするには、UEFI 設定画面を表示し、設定を変更する必要があります。

UEFI 設定画面を表示する方法や設定変更は、端末のファームウェアに依存するので、ASUS、GIGABYTE、MSI 等のマザーボードのメーカーの Web サイト、説明書または、Web 検索での確認が必要です。だいたい端末起動時にファンクションキー(F1 ~ F12, または Del)を入力することで、UEFI 設定画面が表示され、セキュリティ関連の設定に、セキュア ブートの設定があります。

#### Step2. デバッグ設定 (bcdedit)
bcdedit コマンドは、Windows のブート構成データ (BCD) を操作するために使用されるコマンドで、bcdedit により、デバッグの設定をすることが可能です。

https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/bcdedit-command-line-options

boot という文字が入っている設定は、ブート マネージャーやブート ローダーのデバッグをするときに使用し、主に OS 起動不可の原因調査で設定しますので、OS 通常起動時のライブ デバッグでは設定の必要はありません。

```bat
bcdedit /debug {default} on
bcdedit /dbgsettings net hostip:192.168.0.28 port:50000 key:1.2.3.4
::+++++ ブート処理のデバックをしたい場合に以下を設定 +++++
bcdedit /bootdebug {bootmgr} on 
bcdedit /bootdebug {default} on 
bcdedit /set {bootloadersettings} bootdebug on
```

以下、それぞれのコマンドの説明します。
```bat
bcdedit /debug {default} on
```
このコマンドは、システム全体のデバッグ機能を有効にするための設定を行います。
**{default}** は現在の既定のブート エントリを示し、on でデバッグ機能を有効化できます。

このコマンドを実行することで、OSのカーネルデバッグ機能が有効になります。これにより、デバッグ ツールを使用してライブ デバッグができるようになります。

```bat
bcdedit /dbgsettings net hostip:192.168.0.28 port:50000 key:1.2.3.4
```
このコマンドは、ネットワークを介したカーネル デバッグの設定を行います。

- net: ネットワーク デバッグを指定
- hostip:192.168.0.28: Debugger のIPアドレス
- port:50000: デバッグ用に使用するポート番号を指定
- key:1.2.3.4: デバッグセッションを認証するための暗号化キーを指定

この設定により、特定のIPアドレスとポートを使用して、ネットワーク経由でカーネル デバッグが可能になります。key は、**aaa.bbb.ccc.ddd** といったように任意に変更可能です。

```bat
bcdedit /bootdebug {bootmgr} on
```
このコマンドは、Windows のブートマネージャーに対してデバッグ機能を有効にします。
{bootmgr} は、ブート マネージャーのエントリで、on によりブート デバッグを有効化します。

この設定により、Windows が起動する最初の段階であるブート マネージャーのデバッグが可能になります。

```bat
bcdedit /bootdebug {default} on
```
このコマンドは、OS のブート ローダー (winload.exe) に対してデバッグ機能を有効にします。
{default} は、現在の既定のブート エントリを表し、on でブート デバッグを有効化します。

この設定により、ブート ローダーのデバッグすることが可能です。

```bat
bcdedit /set {bootloadersettings} bootdebug on
```
このコマンドは、システムのすべてのブートローダーに対してデバッグ機能を一括で有効にします。
{bootloadersettings} は、すべてのブートローダー設定を一括で管理する特別なエントリを示し、bootdebug onで、ブート デバッグを有効化します。

このコマンドにより、すべてのブート ローダー設定でブート デバッグが有効化され、より広範囲のブートデバッグを行うことができます。

## 参考URL
https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/setting-up-a-network-debugging-connection