mirror of
https://github.com/clearlinux/clear-linux-documentation.git
synced 2026-05-14 10:53:55 +00:00
92 lines
2.8 KiB
ReStructuredText
92 lines
2.8 KiB
ReStructuredText
.. _debug:
|
|
|
|
Debug system
|
|
############
|
|
|
|
|CL-ATTR| introduces a novel approach to system software debugging using
|
|
*clr-debug-info*. On the client side, the |CL| debug system obtains any
|
|
necessary debug information on-the-fly over a network during a debugging
|
|
session. On the server side, the system curates and compresses debug
|
|
information into small pieces for efficient downloading.
|
|
|
|
For developers, this avoids the interruption during debugging that usually
|
|
happens when debug information is missing. This can be especially useful on
|
|
systems where storage is limited.
|
|
|
|
|
|
.. contents:: :local:
|
|
:depth: 2
|
|
|
|
|
|
Background
|
|
----------
|
|
|
|
Software that is compiled and packaged for general usage in an operating
|
|
system typically only contains components that are used to execute the
|
|
program, such as binaries and libraries. Extra developer data, such as the
|
|
actual source code and symbol information, are separated and excluded for
|
|
efficiency.
|
|
|
|
The debug information helps relate binary code to human readable source code
|
|
lines and variables. Most of the time, this auxiliary information
|
|
is not needed;
|
|
however without it, debugging a program results in limited visibility.
|
|
|
|
|
|
Usage
|
|
-----
|
|
|
|
The clr-debug-info system is integrated into |CL| and seamlessly engages once
|
|
installed.
|
|
|
|
#. Install the *dev-utils* bundle.
|
|
|
|
.. code:: bash
|
|
|
|
sudo swupd bundle-add dev-utils
|
|
|
|
.. note::
|
|
|
|
The *telemetrics* and *performance-tools* bundles also include
|
|
clr-debug-info.
|
|
|
|
|
|
#. Start a debugging session against a program using a debugger, such as GDB.
|
|
For example, to debug *gnome-control-center* execute the following
|
|
command:
|
|
|
|
.. code:: bash
|
|
|
|
gdb /usr/bin/gnome-control-center
|
|
|
|
As you step through the program and debug information is needed, the
|
|
clr_debug_daemon obtains it in the background.
|
|
|
|
|
|
Implementation
|
|
--------------
|
|
|
|
The implementation of the |CL| debug system is open source and available on
|
|
GitHub at: https://github.com/clearlinux/clr-debug-info/
|
|
|
|
.. figure:: figures/debug-diagram.png
|
|
:width: 400px
|
|
:alt: Debug system communication flow
|
|
|
|
Figure 1: The communication flow of the |CL| debug system
|
|
|
|
The |CL| debug system implements a :abbr:`FUSE (filesystem in userspace)`
|
|
filesystem mounted at :file:`/usr/lib/debug` and :file:`/usr/src/debug`. The
|
|
FUSE filesystem starts automatically. You can verify its status by executing
|
|
:command:`systemctl status clr_debug_fuse.service`.
|
|
|
|
The *clr_debug_daemon* is responsible for fetching the appropriate package
|
|
debug content from the server and making it available for any debugging
|
|
programs that need it. It is socket activated whenever a request to the local
|
|
FUSE filesystem occurs. You can verify its status with :command:`systemctl
|
|
status clr_debug_daemon.service`.
|
|
|
|
|
|
|CL| hosts debuginfo content packaged for consumption by |CL| debug clients at
|
|
https://download.clearlinux.org/debuginfo/
|