
SoftICE's user interface has remained largely unchanged since the old DOS versions. This comes as a shock to users the first time they see it, because it still looks like an old DOS application, a sometimes unfortunate association I blame on the fonts we use. Fonts seem to be like smells, and the sight of an old font seems to bring back all those bad old DOS memories for people.
Then again, there are plenty of longtime SoftICE users who love the interface, and it has one huge advantage over most other debuggers: it's wickedly fast. So once you climb the learning curve, you might find yourself actually liking that DOS-like interface. You don't have to admit this to anyone, however.
Here's the basic idea behind SoftICE: once the debugger has been started, you can hit CTRL-D at any time and it will pop up in a window of its own. When SoftICE is popped up the machine is completely frozen. No Windows activity of any kind goes on while SoftICE is up. No interrupts are serviced. No tasks run. Not a single instruction in the Windows kernel executes. Instead of running all those hundreds of tasks that seem to be part of every modern Windows installation, your multi-GHz, superscalar, hyperpipelined processor is devoting all of its cycles to listening to you.
This turns out to be very useful in a number of more thorny debugging
problems. SoftICE is mainly sold to device driver developers these days,
because device drivers run in kernel space, so those guys need a kernel
debugger no matter what. But even if you're writing applications there
are still times when a kernel debugger comes in handy. Ever want to
step into a system call? An app debugger might take you right up to the
instruction that enters the OS kernel, but no further. With SoftICE
SYSENTER is just another instruction, and you can follow
your system calls right through into kernel space and see what happens
there.
But back to the interface: SoftICE's window consists of a frame divided horizontally into a number of windows. You can open various windows depending on what you're doing, but the bottom-most window will always be the Command Window. Actually, the Command Window serves two purposes: it displays the command prompt, where commands are entered from the keyboard; and it collects SoftICE output and DebugPrint output from other programs. This collected output is referred to elsewhere as the "History Display."
You can also use the mouse for various things. You can adjust window sizes and select text in the usual way, and there's a right-click menu. It looks like a context menu from Windows, but it's actually not context-sensitive. (It is, however, customizable via the WINICE.DAT file.) The right-click menu lets you copy-and-paste, unassemble code, display memory, and some other things. Oh, and the scroll wheel works in any scrollable window. (The right and left scroll on newer mice isn't supported yet.)
One thing you can't do with the mouse may come as a surprise: you can't use it to move the SoftICE window around the screen. In fact, the mouse cursor is confined to the SoftICE window frame. (It's also turned into a very retro solid box, which is another thing users associate with the DOS days). If you want to move SoftICE's window around, you can do this with CTRL-ALT-<arrow key>.
SoftICE has a huge number of commands. I haven't counted them lately, but there are more than 150. Fortunately, you don't need most of them most of the time. Unfortunately, when you do need them, you might not know that they're there. And some of them are confusingly named.
To be continued...