Debugging Tools for Windows

.ocommand (Expect Commands from Target)

.ocommand 命令使得目标程序可以发送命令到调试器。

语法

.ocommand String 
.ocommand -d 
.ocommand 

参数

String
指定命令前缀字符串。String 可以包含空格,但是不能使用类似\"\n 这样的C风格控制字符。也可以将String包含在引号中。但是,如果String 中含有分号、头部的空格或尾部的空格,就不能用引号包含String
-d
删除命令前缀字符串。

环境

模式 用户模式、内核模式
目标 活动目标、崩溃转储
平台 所有

注释

如果不带参数使用.ocommand ,调试器显示当前的命令前缀字符串。使用.ocommand –d命令清除已存在的字符串。

设置了命令前缀字符串之后,会对目标的任何调试输出(例如OutputDebugString的内容)进行扫描。如果该输出是以命令前缀字符串开头的,那么该输出在前缀字符串之后的文本会被当作调试器命令来运行。当对这个字符串进行执行时,命令字符串不会显示出来。

如果需要附加的信息,目标可以在调试输出字符串中包含.echo (Echo Comment)命令。没有以前缀字符串开头的调试输出仍然按照通常情况处理。

命令字符串中的命令执行之后,如果最后一条命令不是g (Go),则会中断到调试器。

命令前缀字符串和目标的调试输出之间的比较是不区分大小写的。(但是,后面通过.ocommand 命令来显示的字符串是按照输入时的大小写显示的)。

例如,假设在调试器中输入了下面的命令。

0:000> .ocommand magiccommand

然后,目标程序执行下面这行。

OutputDebugString("MagicCommand kb;g");

调试器会将命令字符串前缀识别出来并立即执行kb;g

但是,下面这行不会造成任何命令的执行。

OutputDebugString("Command on next line.\nmagiccommand kb;g");

上面这条命令因为输出的开头不是命令字符串前缀,所以即使它出现在一个新行的开头,也不会执行任何命令。

注意 应该选择一个不会出现在除了命令之外的其他调试输出中的字符串作为命令字符串前缀。

附加信息

关于OutputDebugString 的更多信息和其他用户模式用来和调试器联系的函数,查看Microsoft Windows SDK 文档。

Build machine: CAPEBUILD