The SoftICE User Interface

SoftICE: The Legendary Debugger for Windows

As It Was in the Beginning

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>.

The Commands

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...