VMM and Virtual Device Commands

The VMM and virtual device commands begin with a period (.); these are called dot commands. The following dot commands are listed when the .? command is carried out:

Command Description

.device-name Calls the indicated virtual device so that it can dump relevant information for debugging it.
.ds Dumps the protected-mode stack and displays near code-segment labels (if available) next to each doubleword value from the stack.
.lq Displays the log of queued debug strings. The Queue_Out macro allows a virtual device to specify a string to be queued for this list. In this way, events can be logged for later debugging, thus avoiding the timing problems that usually occur when displaying event notifications to the debug terminal in real time. The queued strings are also interspersed in the trace lists from the .s command, but this command gives a developer a chance to see if certain events occur even when fault tracing has not been enabled with the .t command.
.s [item_num] Displays fault-logging information. If an item_num parameter is given, the list starts with the specified log item; otherwise it starts with the last (most recent) log item and continues through the least recent item. It displays item number, fault number, virtual machine (VM) handle at the time of fault, critical section state, CS:IP of the client (the application being debugged), and, in the case of a GP fault, the executed instruction. The form of the display is as follows:
  = 00003BB8: 000D 60441000 00 01 02B7:23F5 INT 2A 00008002
  The first number (00003BB8) is the log item number. The second number (000D) is the fault (interrupt) number (0Dh identifies a GP fault). The next number (60441000) is the VM handle of the VM interrupted.
  The next two numbers (00) and (01) are the critical section claim counts at the start and end of the fault handling. In this example, the critical section was unclaimed on entry, but the fault handler claimed it before exiting.
  The next number (02B7:23F5) is the client's CS:IP at the time of the interrupt. The next value (Interrupt 2A) is the instruction that the client attempted to execute, causing the protection fault.
  The last number (00008002) is the value of the EAX register. This number is given because it is commonly used when selecting the number of a software interrupt function, and because all software interrupts carried out in virtual 8086 (V86) mode will show in this log. This allows the programmer to see the most about each fault in a single line. When the faulting instruction is an in or out instruction, DX and EAX will be displayed as appropriate.
  After each screen of the display, the 80386 debugger pauses, waiting for the user to press a key to continue. Pressing the ESC key or the CTRL+C key combination cancels any further listing. This command clears the fault-logging flag, to disable further logging.
.sl [item_num] Displays complete fault-logging information. If a log item number is specified, only information for that item is displayed, starting with the condensed line, then the register state at the start of the fault, and then the register state at the end. If no item number is specified, all log items are displayed, starting with the last log item. This list
  shows the log number, fault number, VM handle, client registers, and instruction (if the item is the end-of-fault item).
  Screen handling is performed exactly as with the .s command.
.t Toggles the fault-logging flag. When fault logging is turned on, each system fault (for example, a hardware interrupt, GP fault, page fault, or illegal instruction fault) is logged along with information such as the contents of the registers at the time of the fault. To view the list of logged faults, you can use the .s or .sl command.
.vc Displays the standard fields of the current VM's control block.
.vh Displays the current VM's handle.
.vm Displays the status of the current VM. Status information includes re-entry count, VM handle, critical section state, client registers, and top entries from the client's stack.
.vr Displays the current VM's client registers if the 80386 debugger is running in protected mode.
.vs Displays the current VM's virtual mode stack if the 80386 debugger is running in protected mode.
.vl Displays a list of all valid VM handles.
.vmm Displays a menu of subcommands. Pressing a single key causes the corresponding command to be carried out.

The following commands are used to debug the memory manager when Windows is running in 386 enhanced mode:

Command Description

.md Changes the debug MONO paging display.
.mf Displays the current free list.
.mh [handle] Displays heap information (for Windows 386 enhanced mode) about a specific handle, if any is specified. Otherwise, global information is displayed.
.mi Displays instanced data regions.
.ml [lin_addr] Displays page-table information for the given linear address.
.mm [handle] Displays memory information (for Windows 386 enhanced mode), such as free and locked pages, if no handle is specified. Otherwise, it displays information about the memory handle, such as the size and linear address.
.mo Schedules a page-out event of all present pages that are not locked.
.mp [phys_addr] Displays all linear addresses that map to the given physical address.
.ms [pftaddr] Displays page-frame-table (PFT) information.
.mv Displays the memory handles that are allocated to the current VM.