cc682/NetRoc
http://netroc682.spaces.live.com/
.effmach (Effective Machine)
.effmach 命令显示或更改调试器使用的处理器模式。
语法
.effmach [MachineType]
参数
MachineType
指定调试器为该会话使用的处理器类型。如果省略该参数,调试器显示当前的机器类型。
可以输入下面的机器类型之一。
机器类型
|
说明
|
.
|
使用目标机的处理器模式。
|
#
|
使用最近一次事件的代码所执行的处理器模式。
|
x86
|
使用x86处理器模式。
|
amd64
|
使用x64处理器模式。
|
ia64
|
使用Itanium处理器模式。
|
ebc
|
使用EFI字节码处理器模式。
|
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
注释
处理器模式会影响到一些调试器特性:
- 堆栈回溯时使用哪一种处理器分析器(unwinder)。
- 处理使用32位还是64位指针。
- 使用什么处理器寄存器集合。
.enable_long_status (Enable Long Integer Display)
.enable_long_status 命令指定调试器以10进制格式还是默认基数形式显示长整数。
语法
.enable_long_status 0
.enable_long_status 1
参数
0
以10进制形式显示所有长整数。这是调试器的默认行为。
1
以默认基数显示所有长整数。
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
注释
.enable_long_status 命令作用于dt (Display Type) 命令的输出。
在WinDbg中,.enable_long_status 也作用于Locals 窗口和 Watch 窗口的显示。这些窗口在执行.enable_long_status后会自动刷新。
该命令仅作用于长整数的显示。使用.force_radix_output (Use Radix for Integers) 命令来控制标准整型以10进制还是默认基数显示。
注意 dv (Display Local Variables) 命令总是以当前基数显示长整数。
使用n (Set Number Base) 命令来改变默认基数。
.enable_unicode (Enable Unicode Display)
.enable_unicode 命令指示调试器是否将USHORT指针和数组作为Unicode字符串来显示。
语法
.enable_unicode 0
.enable_unicode 1
参数
0
将所有16位(USHORT)数组和指针显示为短整型。这是调试器的默认行为。
1
将所有16位(USHORT)数组和指针显示为Unicode字符串。
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
注释
.enable_unicode 命令作用于dt (Display Type) 命令的输出。
在WinDbg中,.enable_unicode也作用于Locals 窗口和 Watch 窗口的显示。这些窗口在执行.enable_unicode后会自动刷新
也可以在Locals或Watch窗口的快捷菜单中选择或清除 Display 16-bit values as Unicode 来设置对USHORT数组和指针的显示。
参见
ds, dS (Display String)
.endpsrv (End Process Server)
.endpsrv 命令关闭当前process server 或KD connection server。
语法
.endpsrv
环境
只有在进行通过进程服务器或者KD连接服务器的远程调试时才能使用该命令。
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
注释
.endpsrv 命令结束当前连接到灵巧客户端上的进程服务器或者KD连接服务器。
如果希望在运行进程服务器或KD连接服务器的机器上结束他们,可以使用任务管理器来结束进程 (dbgsrv.exe 或 kdsrv.exe)。
.endpsrv 命令可以结束进程服务器或KD连接服务器,但是它不能结束调试服务器。更多信息,查看控制远程调试会话。
附加信息
关于这些服务器的更多信息,查看进程服务器(用户模式) 或 KD 连接服务器(内核模式)
.endsrv (End Debugging Server)
.endsrv 命令使得调试器取消一个活动的调试服务器。
语法
.endsrv ServerID
参数
ServerID
指定调试服务器的ID。
环境
只有当进行通过调试器的远程调试时才能使用该命令。
模式
|
仅用户模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
注释
必须从调试服务器或者某个连接到调试服务器上的调试客户端上执行.endsrv 命令。
要查看调试服务器的ID,使用.servers (List Debugging Servers) 命令。
.endsrv 命令用于结束调试服务器,但是通常它不能用来结束进程服务器或KD连接服务器。一般来说,进程服务器是由DbgSrv程序启动的,而KD连接服务器由KdSrv程序启动;使用这些方法时,.endsrv 命令不能结束它们 (关于如何结束它们的信息,查看控制进程服务器会话和控制KD连接服务器会话)。但是,如果某个DbgEng程序或者扩展命令通过调用 IDebugClient::StartProcessServer方法来创建进程服务器,则.endsrv 命令可以用来结束它。由于ID号是从0开始连续指派的,所以一般使用.endsrv 0就可以了。
如果取消一个调试服务器,就可以避免之后再有调试客户端附加到它上面。但是,取消调试服务器并不能让任何当前已附加到服务器上的客户端退出。
考虑到以下的情况,假设使用了下面例子的方法来启动调试服务器。
0:000> .server npipe:pipe=rabbit
Server started with 'npipe:pipe=rabbit'
0:000> .server tcp:port=7
Server started with 'tcp:port=7'
之后又决定像下面一样使用密码。
0:000> .server npipe:pipe=tiger,password=hardtoguess
Server started with 'npipe:pipe=tiger,password=hardtoguess'
但是先前的服务器仍然在运行,所以需要像下面一样关闭他们。
0:000> .servers
0 - Debugger Server - npipe:Pipe=rabbit
1 - Debugger Server - tcp:Port=7
2 - Debugger Server - npipe:Pipe=tiger,Password=*
0:000> .endsrv 0
Server told to exit. Actual exit may be delayed until
the next connection attempt.
0:000> .endsrv 1
Server told to exit. Actual exit may be delayed until
the next connection attempt.
0:000> .servers
0 - <Disabled, exit pending>
1 - <Disabled, exit pending>
2 - Debugger Server - npipe:Pipe=tiger,Password=*
最后,要使用.clients (List Debugging Clients) 命令确认没有人再通过先前激活的服务器附加到计算机上。
0:000> .clients
HotMachine\HostUser, last active Mon Mar 04 16:05:21 2002
警告 通过TCP、BPIPE或COM协议使用密码只能提供有限的保护,因为密码是没有加密的。通过SSL或SPIPE协议使用密码时,密码是加密的。如果需要安全的远程会话,必须使用SSL或SPIPE协议。
附加信息
关于远程调试的更多信息,查看通过调试器进行的远程调试。
.enumtag (Enumerate Secondary Callback Data)
.enumtag 命令显示所有次级错误检查回调数据(econdary bug check callback data)和所有数据标签(data tags)。
语法
.enumtag
环境
模式
|
仅内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
注释
只有在产生错误检查后,或者调试内核模式崩溃转储文件时可以使用.enumtag 命令。
对于每个次级错误检查回调数据块,.enumtag 命令显示标签 (以GUID 格式) 和数据(以字节和ASCII 字符形式)。
例如下面这个例子。
kd> .enumtag
{87654321-0000-0000-0000000000000000} - 0xf9c bytes
4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ..............
B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ........@.......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
....
00 00 00 00 00 00 00 00 00 00 00 00 ............
{12345678-0000-0000-0000000000000000} - 0x298 bytes
F4 BF 7B 80 F4 BF 7B 80 00 00 00 00 00 00 00 00 ..{...{.........
4B 44 42 47 98 02 00 00 00 20 4D 80 00 00 00 00 KDBG..... M.....
54 A5 57 80 00 00 00 00 A0 50 5A 80 00 00 00 00 T.W......PZ.....
40 01 08 00 18 00 00 00 BC 7D 50 80 00 00 00 00 @........}P.....
....
00 00 00 00 00 00 00 00 ........
该例子中,第一段次级数据使用GUID ({87654321-0000-0000-0000000000000000})作为标签,第二段数据使用GUID ({12345678-0000-0000-0000000000000000}) 作为标签。但是该数据并不是很有用的格式。
附加信息
关于显示该数据得其他方法的信息,查看解读错误检查回调数据。
.event_code (Display Event Code)
.event_code 当前事件的指令。
语法
.event_code
环境
模式
|
用户模式、内核模式
|
目标
|
仅活动调试
|
平台
|
所有
|
注释
.event_code 命令显示当前事件的指令指针处的16进制指令。如果可能的话,最多显示64字节的指令。
.eventlog (Display Recent Events)
.eventlog 命令显示最近一次Microsoft Win32 调试事件,例如模块加载、进程创建和终止以及线程创建和终止。
语法
.eventlog
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
注释
.eventlog 命令仅显示1024个字符。
下面是.eventlog 命令的例子。
0:000> .eventlog
0904.1014: Load module C:\Windows\system32\ADVAPI32.dll at 000007fe`fed80000
0904.1014: Load module C:\Windows\system32\RPCRT4.dll at 000007fe`fe8c0000
0904.1014: Load module C:\Windows\system32\GDI32.dll at 000007fe`fea00000
0904.1014: Load module C:\Windows\system32\USER32.dll at 00000000`76b10000
0904.1014: Load module C:\Windows\system32\msvcrt.dll at 000007fe`fe450000
0904.1014: Load module C:\Windows\system32\COMDLG32.dll at 000007fe`fecf0000
0904.1014: Load module C:\Windows\system32\SHLWAPI.dll at 000007fe`fe1f0000
0904.1014: Load module C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b6414
4ccf1df_6.0.6000.16386_none_1559f1c6f365a7fa\COMCTL32.dll at 000007fe`fbda0000
0904.1014: Load module C:\Windows\system32\SHELL32.dll at 000007fe`fd4a0000
0904.1014: Load module C:\Windows\system32\WINSPOOL.DRV at 000007fe`f77d0000
0904.1014: Load module C:\Windows\system32\ole32.dll at 000007fe`feb10000
0904.1014: Load module C:\Windows\system32\OLEAUT32.dll at 000007fe`feeb0000
Last event: Break instruction exception - code 80000003 (first chance)
.exepath (Set Executable Path)
.exepath 命令设置或显示可执行文件搜索路径。
语法
.exepath[+] [Directory [; ...]]
参数
+
指示调试器将新的目录添加到可执行文件搜索路径末尾 (而不是替换该路径)。
Directory
指定要加入搜索路径的一个或多个目录。如果不指定Directory,则显示当前搜索路径。可以使用分号分隔多个目录。
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
附加信息
关于如何改变可执行文件搜索路径的更多信息,查看可执行映像路径。
.expr (Choose Expression Evaluator)
.expr 命令指定默认的表达式求值器。
语法
.expr /s masm
.expr /s c++
.expr /q
.expr
参数
/s masm
将默认表达式类型改变为Microsoft Assembler expression evaluator (MASM)。这是调试器启动时的默认类型。
/s c++
将默认表达式类型改变为C++ 表达式。
/q
显示可用的表达式类型的列表。
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
注释
不带参数使用 .expr 时,调试器显示当前的默认表达式类型。
?? (Evaluate C++ Expression) 命令Watch窗口、和 Locals窗口总是使用C++表达式语法。所有其它命令和调试器信息窗口使用默认的表达式求值器。
关于如何控制使用哪一种语法的信息,查看表达式求值。语法的更多信息,查看 数值表达式语法。
.exptr (Display Exception Pointers)
.exptr 命令显示一个EXCEPTION_POINTERS结构。
语法
.exptr Address
参数
Address
指定EXCEPTION_POINTERS结构的地址。
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
.exr (Display Exception Record)
.exr 命令显示某个异常记录的内容。
语法
.exr Address
.exr -1
参数
Address
指定异常记录的地址。如果指定–1作为地址,调试器显示最近一次异常。
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
注释
.exr 命令显示调试器在目标机上遇到的异常的相关信息。该信息包括异常地址、异常代码、异常标志和异常的各种参数的列表。
可以通过!pcr 扩展命令来得到Address。
.exr 命令常常用来调试错误检查0x1E。更多信息和示例,查看Bug Check 0x1E (KMODE_EXCEPTION_NOT_HANDLED)。
.extpath (Set Extension Path)
.extpath 命令设置或显示扩展DLL搜索路径。
语法
.extpath[+] [Directory [; ...]]
参数
+
指示调试器应该把新的目路添加到扩展DLL搜索路径末尾 (而不是替换该路径)。
Directory
指定一个或多个要添加的搜索路径。如果不指定Directory,则显示当前搜索路径。可以用分号分隔多个目录。
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
附加信息
关于扩展DLL的搜索和加载的更多信息,查看加载调试器扩展DLL。