Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compiling gdb for remote debugging

I'm trying to remote debug an application running on arm9

So far I've been able to cross compile and execute gdbserver on my device.

  1. get gdb (7.2) sources and extract them
  2. ./configure --target=arm-none-linux-gnueabi --with-expat=/usr/local/lib/
  3. make
  4. cd gdb/gdbserver
  5. ./configure --host=arm-none-linux-gnueabi
  6. make
  7. tftp gdbserver to my device
  8. run and connect via gdb to the device

gdbserver "seems" to start correctly and attach itself to my helloworld application

When I try to gdb to the remote server, I get
"warning: Can not parse XML target description; XML support was disabled at compile time"

Obviously, the compilation didn't take into account expat. I'm really unsure about how to specify the expat library path to the configuration script.

like image 280
Eric Avatar asked Apr 14 '11 15:04

Eric


People also ask

Can you compile in GDB?

GDB supports on-demand compilation and code injection into programs running under GDB.

What is remote GDB?

It's where you run GDB on one machine and the program being debugged on another. To do this you need something to allow GDB to control the program being debugged, and that something is called the remote stub. GDB ships with a remote stub called gdbserver, but other remote stubs exist.

Is there a GUI for GDB?

gdbgui is a browser-based frontend to gdb , the gnu debugger. You can add breakpoints, view stack traces, and more in C, C++, Go, and Rust! It's perfect for beginners and experts. Simply run gdbgui from the terminal to start the gdbgui server, and a new tab will open in your browser.

What is the need of GDB How can debugging be done using GDB?

Gdb is a debugger for C (and C++). It allows you to do things like run the program up to a certain point then stop and print out the values of certain variables at that point, or step through the program one line at a time and print out the values of each variable after executing each line.


2 Answers

(old question but I stumbled into it via googling the same problem)

The problem is the missing "expat" lib. This is hard to guess because :

  1. this lib is optional for compiling gdb
  2. the "expat" name has no clear connection to XML...

So install "expat-dev" (with your packet manager or anything) and then relaunch ./configure. Be careful to install the "dev" version since we are doing recompilation and need the include files.

To be extra-sure, it's possible to add the "--with-expat" to the ./configure call so that it will stop with an error if expat is not found.

like image 93
Offirmo Avatar answered Oct 15 '22 21:10

Offirmo


Somehow it worked anyway

Also, create a file ~/.gdbinit with

file /home/username/path/to/exec/exec_name
set sysroot /path/to/libraries/running/on/target/device
target remote HOST:PORT
b main
like image 24
Eric Avatar answered Oct 15 '22 22:10

Eric