kumquat-buildroot/docs/manual/using-buildroot-debugger.adoc
Arnout Vandecappelle 4fa204ab11 docs/manual: normalize delimiters of listing blocks
Although the asciidoc toolchain accepts any number of ~ to delimit a
listing block (i.e. a code block), it is actually specified to be
exactly four, i.e. ~~~~. Currently, a mix of diffrent numbers of ~ are
being used - sometimes even a different number at the beginning and at
the end of the block.

Normalize this to always use exactly four ~ for the delimiter.

Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
(cherry picked from commit 447fa1fca425e629cc65cd0a8261a4c09ddf67d2)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-08-07 00:39:49 +02:00

54 lines
1.8 KiB
Plaintext

// -*- mode:doc; -*-
// vim: set syntax=asciidoc:
==== Using +gdb+ in Buildroot
Buildroot allows to do cross-debugging, where the debugger runs on the
build machine and communicates with +gdbserver+ on the target to
control the execution of the program.
To achieve this:
* If you are using an _internal toolchain_ (built by Buildroot), you
must enable +BR2_PACKAGE_HOST_GDB+, +BR2_PACKAGE_GDB+ and
+BR2_PACKAGE_GDB_SERVER+. This ensures that both the cross gdb and
gdbserver get built, and that gdbserver gets installed to your target.
* If you are using an _external toolchain_, you should enable
+BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY+, which will copy the
gdbserver included with the external toolchain to the target. If your
external toolchain does not have a cross gdb or gdbserver, it is also
possible to let Buildroot build them, by enabling the same options as
for the _internal toolchain backend_.
Now, to start debugging a program called +foo+, you should run on the
target:
----
gdbserver :2345 foo
----
This will cause +gdbserver+ to listen on TCP port 2345 for a connection
from the cross gdb.
Then, on the host, you should start the cross gdb using the following
command line:
----
<buildroot>/output/host/bin/<tuple>-gdb -ix <buildroot>/output/staging/usr/share/buildroot/gdbinit foo
----
Of course, +foo+ must be available in the current directory, built
with debugging symbols. Typically you start this command from the
directory where +foo+ is built (and not from +output/target/+ as the
binaries in that directory are stripped).
The +<buildroot>/output/staging/usr/share/buildroot/gdbinit+ file will tell the
cross gdb where to find the libraries of the target.
Finally, to connect to the target from the cross gdb:
----
(gdb) target remote <target ip address>:2345
----