DOS/32 Advanced DOS Extender - Utility Programs
4.0 - DOS/32 Advanced - SUNSYS Protected Mode Debugger
SUNSYS Protected Mode Debugger is a stand alone debugger program which
allows programmers to debug 16-bit and 32-bit protected mode applications. The
Debugger supports the "LE" and "LX" Linear Executable formats which are used by
WATCOM Linker when creating DOS/4GW protected mode applications.
The usage of SUNSYS Protected Mode Debugger is:
SD <execname.xxx>
where the execname.xxx is the file name of the protected mode application that is
to be debugged.
Additionally, a library version of the Debugger, supplied with DOS/32 Advanced
DOS Extender can be statically linked into your applications. To be able to
use the Debugger library you need to include the line #include <debug.h>
into your source files. Before the Debugger library can be used by your program,
it needs to be activated, which is done by calling the Debug_Init() function
(usually done at the startup of the program). Every
time a breakpoint (placed by a call to DBG() function) in your program is encountered,
the application will break to the debugger, allowing you to debug the code.
The SUNSYS Debugger's user interface consists of a number of windows in which the
debugger displays the information, including disassembled CPU instructions, CPU
registers, memory and stack contents etc. Below is included a short reference of
all the windows, their purpose and the actions that can be performed in them.
CPU 80x86/80x87 Window
|
This window displays the disassembled instructions of the code you are
currently debugging.
|
Key
|
Action
|
Description
|
|
|
|
ESC
|
Repaint Screen
|
clear and repaint the screen
|
TAB
|
Next Window
|
switch to the next window
|
SHIFT-TAB
|
Prev Win
|
switch to the previous window
|
ALT-X
|
Exit Debugger
|
exit to DOS
|
PRINT SCREEN
|
DumpScr
|
write the contents of the screen to a file on disk
|
ENTER
|
New Address
|
view the disassembled code at a new address;
addresses preceded by a '.' (point) are treated as
unrelocated addresses, you can also specify a
general register that contains the new address
|
1
|
|
switch between the TD- and WD-style text screen
|
2
|
|
switch between the 16-bit and 32-bit instructions
|
3 or ','
|
|
turn on/off FPU registers shown in Stings Window
|
4 or '.'
|
|
turn on/off unrelocated addresses
|
ARROWS UP and DOWN
|
|
move the cursor up and down
|
ARROWS LEFT and RIGHT
|
|
shift the code by one byte up or down
|
PAGE UP and PAGE DOWN
|
|
move the cursor one page up or down
|
HOME
|
|
move the cursor to the address held by EIP
|
'+' and '-'
|
|
cycle through the selectors in the Memory Window
|
F1
|
Show Info
|
show system information (see below)
|
F2
|
BreakPoint
|
place a hardware breakpoint at the address under the cursor;
the maximum of 3 (three) breakpoints can be active
at the same time
|
F3
|
Return
|
return from subroutine; run until RET, IRET, RETF
or an unconditional JMP instructions, then break to
the debugger
|
F4
|
Run Here
|
run to the address under the cursor
|
F5
|
User Screen
|
switch to the user screen
|
F6
|
New Address
|
skip to cursor; place the address value under the
cursor into the EIP register
|
F7
|
Trace Into
|
single step through the program, stepping into
CALL, LOOP and REP-prefixed instructions
|
F8
|
Step Over
|
single step through the program, stepping over
CALL, LOOP and REP-prefixed instructions
|
F9
|
Run
|
continue execution of the program
|
F10
|
Step Over Jumps
|
single step through the program, stepping over
CALL, LOOP, REP-prefixed and JUMP instructions;
a breakpoint will be placed directly after the
JUMP instruction, allowing you to step over the
Jcc ímplemented loops
|
F11
|
Search New
|
search for an expression; symbol "*" can be used to
indicate the wild-cards, for example: mov ax,[ebx+***]
will match any move to ax from the address pointed
to by ebx plus any other 32-bit general register
|
F12
|
Search Next
|
continue searching for the previously entered string
|
System Information (activated by F1 key)
|
Shows information about the system, descriptors, interrupts and memory blocks. Use the
ESC key to return to the CPU Window.
|
F1
|
DPMI information
|
|
F2
|
GDT information
|
use keys PGUP and PGDOWN to scroll the data in the window
|
F3
|
IDT information
|
use keys PGUP and PGDOWN to scroll the data in the window
|
F4
|
EMBs Information
|
use keys UP, DOWN, PGUP and PGDOWN to scroll the data in the window
|
F5
|
System Interrupt History
|
use keys UP, DOWN, PGUP and PGDOWN to scroll the data in the window;
keys 1, 2, 3 and 4 select a particular interrupt (INT 10h, 21h, 31h and 33h respective),
0 shows all; use the key BACKSPACE to clear the history buffer
|
F6
|
Buffered Interrupts Information
|
use keys: '1' to show INT 10h, '2' to show INT 21h, '3' to show INT 31h, '4' to show INT 33h and '0' to show All
|
F10
|
DOS Extender and Debugger version
|
|
CPU Registers Window
|
In this window will be shown all the CPU general registers, segment registers
and the extended flags.
|
Key
|
Action
|
Description
|
|
|
|
ESC
|
Return to CPU
|
switch back to the CPU Window
|
TAB
|
Next Window
|
switch to the next window
|
SHIFT-TAB
|
Prev Win
|
switch to the previous window
|
ALT-X
|
Exit Debugger
|
exit to DOS
|
ENTER
|
New Value
|
change the value of the selected register; instead of
typing in a number, you can also specify a general
register that contains the new value
|
ARROWS UP and DOWN
|
|
move the cursor up and down, select a register
|
ARROWS LEFT and RIGHT
|
|
move the cursor left and right, select a register
|
PAGE UP and PAGE DOWN
|
|
move the cursor to the next group of registers
|
HOME
|
|
move the cursor to the EAX register
|
END
|
|
move the cursor to the Carry Flag
|
'+' and '-' on keypad
|
|
increment or decrement the selected register's value
|
'/' on keypad
|
|
clear the contents of the selected register (reset to 0)
|
'*' on keypad
|
|
binary NOT the contents of the selected register (NOT reg)
|
Memory Window
|
In this window will be displayed the contents of the memory at the specified
address.
|
Key
|
Action
|
Description
|
|
|
|
ESC
|
Return to CPU
|
switch back to the CPU Window
|
TAB - Next Window
|
Next Window
|
switch to the next window
|
SHIFT-TAB
|
Prev Win
|
switch to the previous window
|
ALT-X
|
Exit Debugger
|
exit to DOS
|
ENTER
|
New Address
|
view the memory contents at specified address;
the addresses preceeded by a '.' are treated as
unrelocated addresses; you can also specify a
general register that contains the new address
|
'+' and '-' on keypad
|
|
cycle through the selectors: CS, DS, ES, SS, FS and GS
|
ARROWS UP and DOWN
|
|
move the cursor up and down
|
ARROWS LEFT and RIGHT
|
|
move the cursor left and right
|
PAGE UP and PAGE DOWN
|
|
move the cursor one page up or down
|
HOME
|
|
move the cursor to the address 0
|
Stack Window
|
In this window will be displayed the contents of the stack memory at the
addresses specified by the SS:ESP registers.
|
Key
|
Action
|
Description
|
|
|
|
ESC
|
Return to CPU
|
return to the CPU Window
|
TAB
|
Next Window
|
switch to the next window
|
SHIFT-TAB
|
Prev Win
|
switch to the previous window
|
ALT-X
|
Exit Debugger
|
exit to DOS
|
ARROWS UP and DOWN
|
|
scroll the contents of the window up and down
|
HOME
|
|
move the cursor to SS:[ESP+00] position
|
Strings Window
|
In this window will be displayed the contents of the memory pointed to by
the registers DS:ESI and ES:EDI. This window cannot be selected and its contents
cannot be modified.
|
FPU Registers Window
|
This window will show the contents of the Floating Point co-processor. This
window cannot be selected and its contents cannot be modified.
|
Copyright © DOS/32 Advanced Team 1996-2002 All Rights Reserved
|