This guide explains how to set up **Serial Kernel Debugging** between two Windows VMs on Proxmox. I use **VM 104** as the Debugger and **VM 112** as the Target which you can find in Proxmox. ### Phase 1: Proxmox Hardware Setup You must add a virtual serial "wire" to both VMs. 1. Log into the **Proxmox Web UI**. 2. For **VM 104 (Debugger)**: * Go to **Hardware** -> **Add** -> **Serial Port**. * Ensure **0** is selected and it says "socket". Click Add. 3. For **VM 112 (Target)**: * Go to **Hardware** -> **Add** -> **Serial Port**. * Ensure **0** is selected and it says "socket". Click Add. 4. **Start both VMs now.** --- ### Phase 2: Create the "Virtual Cable" (Proxmox Host) Even though both VMs have serial ports, they aren't connected yet. We use the Proxmox Shell to bridge them. 1. Open the **Shell** on your Proxmox Host (the physical server). 2. Run this command to link the two virtual sockets: ```bash socat UNIX-CONNECT:/var/run/qemu-server/104.serial0 UNIX-CONNECT:/var/run/qemu-server/112.serial0 & ``` *Note: This command must stay running in the background. If you reboot Proxmox, you must run this again.* --- ### Phase 3: Configure the TARGET VM (VM 112) This tells Windows to send its internal kernel data out through the serial port. 1. Log into **VM 112**. 2. Open **Command Prompt (Admin)**. 3. Run the following commands: ```cmd # Enable kernel debugging bcdedit /debug on # Configure the serial settings (COM1, 115200 baud) bcdedit /dbgsettings serial debugport:1 baudrate:115200 ``` 4. **Restart VM 112.** --- ### Phase 4: Configure the DEBUGGER VM (VM 104) This is where you will watch the logs and control the other VM. 1. Log into **VM 104**. 2. **Verify the Port:** * Right-click the Start button -> **Device Manager**. * Expand **Ports (COM & LPT)**. * Confirm you see "Communications Port (**COM1**)". If it says COM2, remember that for the next step. 3. Open **WinDbg Preview** (or WinDbg Classic). 4. Go to **File** -> **Start Debugging** -> **Attach to Kernel**. 5. Select the **COM** tab and enter: * **Baud Rate:** `115200` * **Port:** `COM1` (Match what you saw in Device Manager) * Check the box for **Initial Break** (optional, but helpful). 6. Click **OK**. 7. The console should show: `Waiting to reconnect...` --- ### Phase 5: Testing the Connection 1. While WinDbg is "Waiting" on VM 104, **Restart VM 112** (the Target). 2. As VM 112 boots, you should see text scrolling in the WinDbg window on VM 104. 3. To pause the target machine and start debugging, click the **Break** button (or press `Ctrl + Break`). 4. The Target VM (112) should completely freeze. This is normal; the kernel is now under your control. 5. Type `g` and press Enter in the WinDbg command line to let the Target VM continue running.