Specifications

10.5.2. Remote Debugging
gdbserver allows you to connect your program with a remote GDB using the "target remote" command.
On the target machine, you need to have a copy of the program you want to debug. gdbserver does not
need your program's symbol table, so you can strip the program if necessary to save space. GDB on the host
system does all the symbol handling. Here is an example:
bash$ ${CROSS_COMPILE}gcc -Wall -g -o hello hello.c
bash$ cp -p hello <directory-shared-with-target>/hello-stripped
bash$ ${CROSS_COMPILE}strip <directory-shared-with-target>/hello-stripped
To use the server, you must tell it how to communicate with GDB, the name of your program, and the
arguments for your program. To start a debugging session via network type on the target:
bash$ cd <directory-shared-with-host>
bash$ gdbserver 192.168.1.1:12345 hello-stripped
Process hello-stripped created; pid = 353
And then on the host:
bash$ ${CROSS_COMPILE}gdb hello
...
(gdb) set solib-absolute-prefix /opt/eldk/$CROSS_COMPILE
(gdb) dir /opt/eldk/$CROSS_COMPILE
Source directories searched:
/opt/eldk/$CROSS_COMPILE:$cdir:$cwd
(gdb) target remote 192.168.1.99:12345
Remote debugging using 192.168.1.99:12345
0x30012748 in ?? ()
...
(gdb) l
1 #include <stdio.h>
2
3 int main(int argc, char* argv[])
4 {
5 printf ("Hello world\n");
6 return 0;
7 }
(gdb) break 5
Breakpoint 1 at 0x10000498: file hello.c, line 5.
(gdb) continue
Continuing.
Breakpoint 1, main (argc=1, argv=0x7ffffbe4) at hello.c:5
5 printf ("Hello world\n");
(gdb) p argc
$1 = 1
(gdb) continue
Continuing.
Program exited normally.
If the target program you want to debug is linked against shared libraries, you must tell GDB where the
proper target libraries are located. This is done using the set solib-absolute-prefix GDB
command. If this command is omitted, then, apparently, GDB loads the host versions of the libraries and gets
crazy because of that.
10.6. Debugging with Graphical User Interfaces
10.6. Debugging with Graphical User Interfaces 136