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