DEBNT: Debugging

GDB:

NT09B contains the GDB. This version of the GDB allows to debug Win32 and bound programs under Win95 and WinNT.

You can debug normal emx programs with the command “RSX GDB”. This command starts the GDB under DOS (DPMI).

Prepare for debugging:

Debug switches:

You should use the GCC switch ‘-g’ and the Win32 switches -Zwin32 or -Zrsx32.

Example for GUI programs:

	gcc -g -Zwin32 gui-test.c

Example for bound programs:

	gcc -g -Zrsx32 boundprg.c

Debugging with GDB:

Sample session:

C:\RSXNT\SAMPLE\CONSOLE\ARGVENV>gdb argvenv.exe
GDB is free software and you are welcome to distribute copies of it
 under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.15 (rsxnt), Copyright 1995 Free Software Foundation, Inc...

(gdb) list main		<- lists the main function

19          }
20          return 0;
21      }
22
23      int main(int argc, char **argv, char **env)
24      {
25          int i;
26
27      #if 0
28      #if defined (__EMX__)

(gdb) tb 25			<- break point at line 25

Breakpoint 1 at 0x410107: file argvenv.c, line 25.

(gdb) run arg1 arg2		<- runs program with 2 arguments

Starting program: c:/rsxnt/sample/console/argvenv/argvenv.exe arg1 arg2
main (argc=3, argv=0x71fa94, env=0x71fa28) at argvenv.c:35
35          printf("Environment:\n");

(gdb) print argv[1]		<- prints variable

$1 = 0x71faa7 "arg1"

(gdb) next			<- execute program one line

36          for (i=0;env[i]!=NULL;++i)
(gdb) n			<- execute program one line

37              printf("%02d: %s\n",i,env[i]);

(gdb) c			<- continue program execution
Continuing.

Program exited normally.

(gdb) quit			<- exit gdb

C:\RSXNT\SAMPLE\CONSOLE\ARGVENV>

Debugging with DEBNT:

You should use DEBNT only for low-level debugging.

Output from debugger:

C:\RSXNT\SAMPLE\DUAL>debnt rshell.exe
child PID 3
debugging file rshell.exe
GNUAOUT HEADER
text   = 00007000
data   = 00001000
bss    = 00001440
entry  = 00410000
syms   = 00003864

eip=00410000 eflags=00000a86
eax=00410000 ebx=005c0000 ecx=0061ff68 edx=bffc2a10
esp=0061fe3c ebp=0061ff78 esi=81530ff0 edi=8153133c
cs=0137 ds=013f es=013f ss=013f
__text():
00410000: 6800004200     push    __data
cmd:

First command:
cmd:go main
_main() (rshell.c#319): {
00410dd0: 55             push    ebp
cmd:list
_main() (rshell.c#319): {
00410dd0: 55             push    ebp
00410dd1: 89e5           mov     ebp,esp
00410dd3: 81ec04030000   sub     esp,0x304
00410dd9: e83e0a0000     call    ___main

Help:

cmd:help
go <v>       g - go or continue execution
cont <v>     c - continue execution
step         s - step through instruction
next         n - step to next instruction
list <v>     l - list instructions at <v>
dump <v>     d - dump memory at <v>
disp v         - display symbol v
reg <m> <v>  r - show/set registers
where        w - display list of active functions
find         f - find a symbol/location (wildcard)
bp v           - set breakpoint at v
bx no          - x=List/Clear/Dis-/Enable breakpoint no
set m v <s>    - memory to value; size=byte/word
process        - show process data
sel s <n>      - show n selectors start with s
shell argv     - execute other program
quit         q - terminate debugger
help         ? - this text