From: Mathieu Othacehe <othacehe@gnu.org>
To: docs@lists.yoctoproject.org
Cc: Antonin Godard <antonin.godard@bootlin.com>,
Mathieu Othacehe <othacehe@gnu.org>
Subject: [PATCH v3 2/2] dev-manual/debugging: Add a "Backtraces or target" section
Date: Tue, 11 Feb 2025 17:12:39 +0100 [thread overview]
Message-ID: <20250211161239.5396-3-othacehe@gnu.org> (raw)
In-Reply-To: <20250211161239.5396-1-othacehe@gnu.org>
That section is presenting how to rely upon the minidebuginfo, and possibly
the PACKAGE_KEEP_DEBUG_FRAME variable to get backtraces on target.
---
documentation/dev-manual/debugging.rst | 55 ++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/documentation/dev-manual/debugging.rst b/documentation/dev-manual/debugging.rst
index 92458a0c3..6fc0bc2d4 100644
--- a/documentation/dev-manual/debugging.rst
+++ b/documentation/dev-manual/debugging.rst
@@ -1199,6 +1199,61 @@ coredumps (commands ``coredumpctl list`` and ``coredumpctl info``).
This feature was created by Fedora, see https://fedoraproject.org/wiki/Features/MiniDebugInfo for
more details.
+Backtraces on target
+====================
+
+Some high level languages such as Python have an integrated backtrace system
+allowing to get the call-stack up to the failure on target. For C and C++
+programs though, there is no such thing and getting backtraces on the target
+involves some effort. To get human readable backtraces, you need three
+different components:
+
+- The symbols: it can only be function names if you consider the mechanism
+ described in the ":ref:`dev-manual/debugging:enabling minidebuginfo`"
+ section. If storage is not an issue, you can also use the complete symbol
+ tables by disabling stripping in your ``local.conf`` file::
+
+ INHIBIT_PACKAGE_STRIP = "1"
+
+- The unwind tables: those are architecture dependent. On *x86* and *aarch64*
+ architectures, the ``.eh_frame`` and ``.eh_frame_hdr`` ELF sections that are
+ used for exception handling can also be used for stack unwinding. Those
+ sections are not stripped by default. On other architectures such as
+ *armv7*, the ``.ARM.exidx`` and ``.ARM.extab`` ELF sections that are used
+ for exception handling can also be used for stack unwinding. However, one
+ might prefer to rely upon the ``.debug_frame`` section. That section
+ contains DWARF unwinding material, similar to what's in the ``.eh_frame``
+ section. As ``.debug_frame`` is stripped by default, an option is to
+ instruct the ``strip`` command to always keep the ``.debug_frame`` section
+ around, by setting :term:`PACKAGE_KEEP_DEBUG_FRAME` in the ``local.conf``
+ file::
+
+ PACKAGE_KEEP_DEBUG_FRAME = "1"
+
+- An unwind program such as ``GDB`` or library such as ``libunwind``. That one
+ will use the unwind tables to get the call-stack at the moment of the
+ crash. Then it will perform the translation between the function addresses
+ and the symbols to get a human readable backtrace.
+
+With those three components in your image, you can for example configure
+``libunwind`` to display a backtrace when receiving a ``Segmentation fault``
+signal. You would then get backtraces similar to that one::
+
+ Backtrace:
+ 0x400da9: segmentation_fault_handler(int) + 0xb
+ 0xb6d64a6e: strlen + 0xad
+ 0xb6d38dcf: __printf_buffer + 0x112d
+ 0xb6d4be7f: __vsnprintf + 0x31
+ 0x400c79: print_info(char const*, ...) + 0x5f
+ 0x400ddb: main + 0x13
+ 0xb6d182cb: __libc_start_call_main + 0x45
+ 0xb6d18367: __libc_start_main + 0x5d
+ Segmentation fault
+
+If you are using an unwinding section that was already present on target and
+the ``minidebuginfo`` mechanism, the overhead only consists in the compressed
+function symbols and the addition of the unwinding program or library.
+
Other Debugging Tips
====================
--
2.47.1
next prev parent reply other threads:[~2025-02-11 16:13 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-11 16:12 [PATCH v3 0/2] Document the PACKAGE_KEEP_DEBUG_FRAME variable Mathieu Othacehe
2025-02-11 16:12 ` [PATCH v3 1/2] profile-manual: " Mathieu Othacehe
2025-02-11 16:12 ` Mathieu Othacehe [this message]
2025-02-17 9:00 ` [PATCH v3 0/2] " Antonin Godard
2025-02-17 10:12 ` Mathieu Othacehe
2025-02-17 14:47 ` [docs] " Richard Purdie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250211161239.5396-3-othacehe@gnu.org \
--to=othacehe@gnu.org \
--cc=antonin.godard@bootlin.com \
--cc=docs@lists.yoctoproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.