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
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>
You should use DEBNT only for low-level debugging.
Output from debugger:
C:\RSXNT\SAMPLE\DUAL>debnt rshell.exechild 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:
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:
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