Skip to main content

PyPI CI Status Documentation Status black badge

drgn (pronounced “dragon”) is a debugger with an emphasis on programmability. drgn exposes the types and variables in a program for easy, expressive scripting in Python. For example, you can debug the Linux kernel:

>>> from drgn.helpers.linux import list_for_each_entry
>>> for mod in list_for_each_entry('struct module',
...                                prog['modules'].address_of_(),
...                                'list'):
...    if mod.refcnt.counter > 10:
...        print(mod.name)
...
(char [56])"snd"
(char [56])"evdev"
(char [56])"i915"

Although other debuggers like GDB have scripting support, drgn aims to make scripting as natural as possible so that debugging feels like coding. This makes it well-suited for introspecting the complex, inter-connected state in large programs.

Additionally, drgn is designed as a library that can be used to build debugging and introspection tools; see the official tools.

drgn was developed at Meta for debugging the Linux kernel (as an alternative to the crash utility), but it can also debug userspace programs written in C. C++ support is in progress.

Documentation can be found at drgn.readthedocs.io.

Installation

Package Manager

drgn can be installed using the package manager on some Linux distributions.

Packaging Status
  • Fedora >= 32

    $ sudo dnf install drgn
  • RHEL/CentOS >= 8

    Enable EPEL. Then:

    $ sudo dnf install drgn
  • Oracle Linux >= 8

    Enable the ol8_addons or ol9_addons repository and install drgn:

    $ sudo dnf config-manager --enable ol8_addons  # OR: ol9_addons
    $ sudo dnf install drgn

    Drgn is also available for Python versions in application streams. For example, use dnf install python3.12-drgn to install drgn for Python 3.12. See the documentation for drgn in Oracle Linux 9 and Oracle Linux 8 for more information.

  • Arch Linux

    $ sudo pacman -S drgn
  • Debian >= 12 (Bookworm)

    $ sudo apt install python3-drgn
  • Gentoo

    $ sudo emerge dev-debug/drgn
  • openSUSE

    $ sudo zypper install python3-drgn
  • Ubuntu

    Enable the michel-slm/kernel-utils PPA. Then:

    $ sudo apt install python3-drgn

pip

If your Linux distribution doesn’t package the latest release of drgn, you can install it with pip.

First, install pip. Then, run:

$ sudo pip3 install drgn

This will install a binary wheel by default. If you get a build error, then pip wasn’t able to use the binary wheel. Install the dependencies listed below and try again.

Note that RHEL/CentOS 6, Debian Stretch, Ubuntu Trusty, and Ubuntu Xenial (and older) ship Python versions which are too old. Python 3.6 or newer must be installed.

From Source

To get the development version of drgn, you will need to build it from source. First, install dependencies:

  • Fedora

    $ sudo dnf install autoconf automake check-devel elfutils-devel gcc git libkdumpfile-devel libtool make pkgconf python3 python3-devel python3-pip python3-setuptools
  • RHEL/CentOS/Oracle Linux

    $ sudo dnf install autoconf automake check-devel elfutils-devel gcc git libtool make pkgconf python3 python3-devel python3-pip python3-setuptools

    Optionally, install libkdumpfile-devel from EPEL on RHEL/CentOS >= 8 or install libkdumpfile from source if you want support for the makedumpfile format. For Oracle Linux >= 7, libkdumpfile-devel can be installed directly from the corresponding addons repository (e.g. ol9_addons).

    Replace dnf with yum for RHEL/CentOS/Oracle Linux < 8.

    When building on RHEL/CentOS/Oracle Linux < 8, you may need to use a newer version of GCC, for example, using the devtoolset-12 developer toolset. Check your distribution’s documentation for information on installing and using these newer toolchains.

  • Debian/Ubuntu

    $ sudo apt install autoconf automake check gcc git liblzma-dev libelf-dev libdw-dev libtool make pkgconf python3 python3-dev python3-pip python3-setuptools zlib1g-dev

    Optionally, install libkdumpfile from source if you want support for the makedumpfile format.

  • Arch Linux

    $ sudo pacman -S --needed autoconf automake check gcc git libelf libkdumpfile libtool make pkgconf python python-pip python-setuptools
  • Gentoo

    $ sudo emerge --noreplace --oneshot dev-build/autoconf dev-build/automake dev-libs/check dev-libs/elfutils sys-devel/gcc dev-vcs/git dev-libs/libkdumpfile dev-build/libtool dev-build/make dev-python/pip virtual/pkgconfig dev-lang/python dev-python/setuptools
  • openSUSE

    $ sudo zypper install autoconf automake check-devel gcc git libdw-devel libelf-devel libkdumpfile-devel libtool make pkgconf python3 python3-devel python3-pip python3-setuptools

Then, run:

$ git clone https://github.com/osandov/drgn.git
$ cd drgn
$ python3 setup.py build
$ sudo python3 setup.py install

See the installation documentation for more options.

Quick Start

drgn debugs the running kernel by default; run sudo drgn. To debug a running program, run sudo drgn -p $PID. To debug a core dump (either a kernel vmcore or a userspace core dump), run drgn -c $PATH. Make sure to install debugging symbols for whatever you are debugging.

Then, you can access variables in the program with prog['name'] and access structure members with .:

$ sudo drgn
>>> prog['init_task'].comm
(char [16])"swapper/0"

You can use various predefined helpers:

>>> len(list(bpf_prog_for_each()))
11
>>> task = find_task(115)
>>> cmdline(task)
[b'findmnt', b'-p']

You can get stack traces with stack_trace() and access parameters or local variables with trace['name']:

>>> trace = stack_trace(task)
>>> trace[5]
#5 at 0xffffffff8a5a32d0 (do_sys_poll+0x400/0x578) in do_poll at ./fs/select.c:961:8 (inlined)
>>> poll_list = trace[5]['list']
>>> file = fget(task, poll_list.entries[0].fd)
>>> d_path(file.f_path.address_of_())
b'/proc/115/mountinfo'

See the user guide for more details and features.

Getting Help

License

Copyright (c) Meta Platforms, Inc. and affiliates.

drgn is licensed under the LGPLv2.1 or later.

Metadata

Release files for drgn 0.0.30

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for drgn 0.0.30
File Size Uploaded
drgn-0.0.30.tar.gz 1.3 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for drgn 0.0.30
File
drgn-0.0.30-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 free-threading Linux glibc 2.17+ x86-64 Details
drgn-0.0.30-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
drgn-0.0.30-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
drgn-0.0.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
drgn-0.0.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
drgn-0.0.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64 Details
drgn-0.0.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.17+ x86-64 Details
drgn-0.0.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.17+ x86-64 Details
drgn-0.0.30-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.17+ x86-64 Details

Total release size: 45.0 MB

Release files / drgn-0.0.30.tar.gz

Download URL drgn-0.0.30.tar.gz
Size 1.3 MB
Tags Source
SHA-256 checksum
How to use checksums
3594ca8095c846f7acd9d723a2304f0171fd740250804633b791b15223b44eed
BLAKE2b-256 checksum
How to use checksums
7db5d601dc9bfc4393a03e9b3bd8fd79fb04fdc7bb2d88dcc095cbadc779aec6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.0

Release files / drgn-0.0.30-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL drgn-0.0.30-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.9 MB
Tags CPython 3.13 CPython 3.13 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
0faf67aa4fb01ed01327f6785a02a9c8d0d456405fedaaa5046d51ccb1ea68bd
BLAKE2b-256 checksum
How to use checksums
d8bc79aa41094e545b59eac5f8b56ebe9292b342496691151b74be9cb98528da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.0

Release files / drgn-0.0.30-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL drgn-0.0.30-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.9 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
55f00faa60b4ec421c5975cea428eeafcb5b8bb93fd05b51dc42f75d1a9cbd6e
BLAKE2b-256 checksum
How to use checksums
5d2e02863ebcc69e7f8163d29d20bec06b61f80b3744c85a327f06750756a698
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.0

Release files / drgn-0.0.30-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL drgn-0.0.30-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.9 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
8d06a3eecb99ec4dbb582e959ccbfd51533f4fb912448228975e99c7cce3053a
BLAKE2b-256 checksum
How to use checksums
3bfeb272017a85ad8cdcfff42845a189ad92f897d328591bec6f707ce36498b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.0

Release files / drgn-0.0.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL drgn-0.0.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.9 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
69edb2a3518780083fe09f3e000cf4b17be7ea27baf16d66a041bf310b72e5d2
BLAKE2b-256 checksum
How to use checksums
a7b8ac6eb1c87ab0948844271f6f5ff8e4c29d9471b209458e9d4de68f0617ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.0

Release files / drgn-0.0.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL drgn-0.0.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.8 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
ba087a0f9cc7bbb9fc31165234d4be69fe2b780141b724fa35675564107900f1
BLAKE2b-256 checksum
How to use checksums
6482c5c54dae52c24ff440d20c6948cdc47581af7d857475f84d06b5024a53b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.0

Release files / drgn-0.0.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL drgn-0.0.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.8 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
57e8f9dd925d623d8010c99c88faaa1eec387e5c9a308f12c1fd707900866de1
BLAKE2b-256 checksum
How to use checksums
bb539adf7c5905b57e3593d2ed42f063f9d306bdb287a3b45888cfb4cf47a3b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.0

Release files / drgn-0.0.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL drgn-0.0.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.8 MB
Tags CPython 3.8 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
581edd55361ec9d5a2d432d08b260a40ef099ce6dea03a57aa9a46995e1406d2
BLAKE2b-256 checksum
How to use checksums
37c82290cf9b13448f1c72ab59513ec3bed542c7191fc1f9b342e7c231d1218c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.0

Release files / drgn-0.0.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL drgn-0.0.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.8 MB
Tags CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
92315d3233eb44151768da573174b91546173ea9eb18d1dc4b49b72b548322db
BLAKE2b-256 checksum
How to use checksums
b8b530745c27a546bb02229487d4cf48d29b8d61b52137a7b1f097bec2969a24
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.0

Release files / drgn-0.0.30-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL drgn-0.0.30-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.8 MB
Tags CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
b751d6adc17256d24f06e9f2c1bf8f0c68bff4c4a249baa146191181ebea048d
BLAKE2b-256 checksum
How to use checksums
ec039ce5a443a493e4c23ad9cfd9ebedd20fd4485c36b6e26d73d01efb55cb68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.0
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page