Difference between revisions of "GDB"

From ArmadeusWiki
Jump to: navigation, search
m
(add libthread_db.so hint)
Line 77: Line 77:
 
<pre class="apf">
 
<pre class="apf">
 
  # gdb your_prog -c your_core_file
 
  # gdb your_prog -c your_core_file
 +
</pre>
 +
 +
==Troubleshots==
 +
If you see that kind of error message when using gdb:
 +
<pre class="apf">
 +
dlopen failed on 'libthread_db.so.1' - File not found
 +
GDB will not be able to debug pthreads.
 +
</pre>
 +
Don't worry ! ;-)<br>
 +
''libthread_db.so'' (db == debug) is a library that is needed when you want to debug programs using pthread. You will have to reconfigure the uClibc to get it build:
 +
<pre class="host">
 +
$ make uclic-menuconfig
 +
</pre>
 +
<pre class="config">
 +
General Library Settings  --->
 +
    ...
 +
    [*] POSIX Threading Support
 +
    [*]  Build pthreads debugging support
 +
    ...
 +
</pre>
 +
Save your uClibc config and make it standard for next build:
 +
<pre class="host">
 +
$ cp buildroot/toolchain_build_armv5te/uClibc-0.9.29/.config buildroot/target/device/armadeus/apf27/uClibc.config.arm
 +
</pre>
 +
 +
Then rebuild all the toolchain ('''this will erase your local modifications !!''')
 +
<pre class="host">
 +
$ rm -rf buildroot/toolchain_build_armv5te
 +
$ rm -rf buildroot/build_armv5te
 +
$ rm -rf buildroot/project_build_armv5te
 +
$ make
 
</pre>
 
</pre>
  

Revision as of 09:12, 14 October 2010

On this page you will find all you need to debug your userspace applications running on your Armadeus board.

Note Note: First of all, be sure to have installed the Toolchain on your Host.


Compile your program with debug symbols

  • Use -g option of gcc:
 $ make shell_env
 $ . armadeus_env.sh
 $ export PATH=$PATH:$ARMADEUS_TOOLCHAIN_PATH

 $ arm-linux-gcc -g -o hello hello.c
  • If you have a Makefile for your project, you probably have a CFLAGS variable, so add it -g. Ex:
CFLAGS=-W -Wall -g

Debugging a program running on your APF remotely from your Host (through Ethernet)

  • On the target launch your program like that:
 # gdbserver 192.168.0.2:2345 program [args]

192.168.0.2 is the IP address of your Host and 2345 the port number to use (examples).

  • On your Host launch:
 []$ arm-linux-gdb program
 (gdb) set solib-absolute-prefix ./buildroot/build_armv4t/staging_dir/
 (gdb) target remote 192.168.0.10:2345

192.168.0.10 is the address of your target

Note Note: Only continue / c can be used to start the program, because it is already running when you launch GDB on your host.


 (gdb) break main
 (gdb) continue
...
 (gdb) next
...
  • If the program is already running, gdbserver can attach itself to the process, if you give him its PID
 # ps
... get process PID
 # gdbserver 192.168.0.2:2345 --attach PID
Note Note: Core dump analysis doesn't seem to work in this use case (ie on the Host with arm-linux-gdb) !!


Debugging directly on your APF (may require more memory)

  • You have to build gdb for the target:
 $ make menuconfig
Toolchain  --->
        *** Gdb Options ***
    [*] Build gdb debugger for the Target
 $ make

Then you can either reflash your rootfs, or copy $ARMADEUS_ROOTFS_DIR/bin/gdb to your board, to a SD or to a NFS export.

  • After installation, launch gdb on your APF:
 # gdb your_prog

If you need argument passing:

 # gdb --args your_prog your_args

To debug a Core dump:

 # gdb your_prog -c your_core_file

Troubleshots

If you see that kind of error message when using gdb:

dlopen failed on 'libthread_db.so.1' - File not found
GDB will not be able to debug pthreads.

Don't worry ! ;-)
libthread_db.so (db == debug) is a library that is needed when you want to debug programs using pthread. You will have to reconfigure the uClibc to get it build:

$ make uclic-menuconfig
General Library Settings  --->
    ...
    [*] POSIX Threading Support
    [*]   Build pthreads debugging support
    ...

Save your uClibc config and make it standard for next build:

$ cp buildroot/toolchain_build_armv5te/uClibc-0.9.29/.config buildroot/target/device/armadeus/apf27/uClibc.config.arm

Then rebuild all the toolchain (this will erase your local modifications !!)

$ rm -rf buildroot/toolchain_build_armv5te
$ rm -rf buildroot/build_armv5te
$ rm -rf buildroot/project_build_armv5te
$ make

Links