From ArmadeusWiki
Jump to: navigation, search

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

 $ 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 program [args] 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/output/build/staging_dir/
 (gdb) target remote 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 --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/usr/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


pthread debugging

  • If you see that kind of error message when using gdb:
dlopen failed on '' - File not found
GDB will not be able to debug pthreads.

Don't worry ! ;-) (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 uclibc-menuconfig
General Library Settings  --->
    [*] POSIX Threading Support
    [*]   Build pthreads debugging support
  • Save your uClibc config and make it standard for next build:
$ cp buildroot/output/toolchain/uClibc- buildroot/target/device/armadeus/apfXX/uClibc.config.arm
  • Then rebuild all the toolchain (this will erase your local modifications !!)
$ rm -rf buildroot/output
$ make