SoftICE for WIN95中文命令解说(二)

/ns/cn/tool/data/20010129095255.htm

SoftICE for WIN95中文命令解说(二)
Copyright (c) 1999 http://coobe.cs.hn.cninfo.net/~tianwei

命令: BC
作用: 清除一个或多个断点
语法: BC list | *
用法:
清除断点后,用BL命令就看不到断点列表, 且被清除的
断点不再起作用.
参数:
list: 可以是将要清除的一系列断点,中间用空格或逗
号隔开.
* : 清除所有的断点.

点评: BC==Breakpoint Clearing

命令: BD
作用: 使一个或多个断点失效
语法: BD list | *
用法:
使某个断点失效不同与 BC 命令的清除,暂时失效的断
点可以用 BE 命令来恢复.而 BC 命令是彻底清除.
参数:
list: 可以是单个,也可以是一系列断点, 中间用空格
或逗号隔开.
* : 禁止所有的断点.

点评: BD==Breakpoint Disablling

命令: BE
作用: 使一个或多个断点恢复有效
语法: BE list | *
用法:
用来恢复前次用 BD 命令使之失效的断点. (每当新定
义断点或编辑断点时,系统自动将其置为有效)
参数:
list: 可以是单个,也可以是一系列断点, 中间用空格
或逗号隔开.
* : 恢复所有的断点.

点评: BE==Breakpoint enablling

命令: BH
作用: 在SoftICE历史数据库中显示或是选择曾经设过的断点
语法: BH
用法:
用BH命令后,SoftICE将显示一个表,每一行是一个断点
,都是以前使用者曾经下过的断点, 这时可以用上下光
标键来定位,用INSERT键选择,再用ENTER键来确定. 用
ESC键取消.SoftICE只记录最近的32个断点. 而且只在
WIN95正常退出后记录(记录到WINICE.BRK中), 这样就
有一个问题.如果你在MSDOS.SYS配置中是BootGUI=1的
话(即最正常的启动方式),当你SHUT DOWN机器时,控制
并不回到SoftICE手中,就无法记录刚才的断点.这时只
有改为BootGUI=0.

点评:
注意:SoftICE只在SHUT DOWN时记录,如果你用"重新启
动并切换...",那是不行的.至少在我的V3.20是不行的
.而且,如果你"重新启动并切换...", 再用EXIT命令想
退回到WIN95,很容易出现VxD联接错.因为这样 WINICE
并没有完全退出内存,用 MEM.EXE可以看到这点.所以,
SoftICE的使用者最好在MSDOS.SYS中将上面所说的Boo
-tGUI置为0.如果怕这样用多重配置的话还要每次开机
敲一个WIN,可以在AUTOEXEC.BAT中改动,加入WIN.COM.
(可不要在WINICE.EXE后再加WIN.COM!画蛇添足!)
若用SoftICE次数不多的话, 可以每次启动WINDOWS后,
再重新启动并切换到MS-DOS方式,再打WINICE.EXE, 这
样也可以的. BH的好处是,可以省去纸笔, 下次重调试
这个程序时,不用再挖空心思想断点了.


命令: BL
作用: 显示当前所设的断点
语法: BL
用法:
BL 命令显示当前所有断点的序号 (这个序号被BC BE
BD 等命令所用),类型,是否被禁止等信息.如果是被禁
止的断点,会在序号后跟一个"*"号.比如用上面提到的
BD 命令会产生这种效果)

点评: BL==Breakpoint listing

命令: BMSG
作用: 在WIN95的消息上下断点
语法: BMSG window-handle [L] [begin-msg [end-msg ]]
[IF expression][DO "command1;command2;..."]
用法:
window-handle: 消息发向的窗口句柄
begin-msg : 消息标识字的范围,如果没有end-msg
,那么只在begin-msg上下断点, 否则
在区域内所有消息都会被下断点
end-msg : 见上.
IF-expression: 表达式的值为真时,SoftICE才弹出.
DO "command1;command2;...":
当到达断点时,执行的一系列SoftICE
命令.
L : 表示不弹出SoftICE,而是在命令窗口
中记录WIN95消息.

上面只有窗口句柄是必需的,其他都是可选项. 如果没
有指定在哪个MSG上下断点, 那么所有发向该窗口的消
息都会被拦截.窗口句柄可以用HWND命令来观看,MSG标
识符可以用 WMSG 命令来察看,可以是16进制的数, 也
可以用习惯的书写方式,如:WM_CREATE.SoftICE弹出后
,会停在处理该消息的过程的第一句代码上.

点评:
BMSG=(set)Breakpoint on MeSsaGe
WINDOWS本身是由消息驱动的, 所以跟踪一个消息会得
到相当底层的答案,我主页上一篇"修改RICHWIN4.3"的
文章就是一个例子.


命令: BPE
作用: 编辑一个已存在的断点.
语法: BPE index_number
用法:
index_number: 断点的序号,用 BL 命令可以看到.
用BPE命令可以很方便地修改一个已经存在的断点, 但
要注意一点: BPE 在执行时,会先将你所要修改的断点
清除,然后再将改过的使能,如果你在修改时按ESC键退
出修改,那么原先的断点也就不存在了, 修改错误的结
果也是一样的.原先的断点消失.

点评: 参见后面的 BPT 命令.