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, RHEL/CentOS Stream >= 9

    $ sudo dnf install drgn
  • RHEL/CentOS < 9

    Enable EPEL. Then:

    $ sudo dnf install drgn
  • Oracle Linux >= 8

    Enable the ol8_addons or ol9_addons repository. Then:

    $ 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.

  • Debian >= 12 (Bookworm)/Ubuntu >= 24.04 (Noble Numbat)

    $ sudo apt install python3-drgn

    To get the latest version on Ubuntu, enable the michel-slm/kernel-utils PPA first.

  • Arch Linux

    $ sudo pacman -S drgn
  • Gentoo

    $ sudo emerge dev-debug/drgn
  • openSUSE

    $ sudo zypper 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, RHEL/CentOS Stream >= 9

    $ sudo dnf install autoconf automake check-devel elfutils-debuginfod-client-devel elfutils-devel gcc git libkdumpfile-devel libtool make pkgconf python3 python3-devel python3-pip python3-setuptools
  • RHEL/CentOS < 9, 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 libdebuginfod-dev libkdumpfile-dev liblzma-dev libelf-dev libdw-dev libtool make pkgconf python3 python3-dev python3-pip python3-setuptools zlib1g-dev

    On Debian <= 11 (Bullseye) and Ubuntu <= 22.04 (Jammy Jellyfish), libkdumpfile-dev is not available, so you must 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 libdebuginfod-devel 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; simply run drgn. To debug a running program, run 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 .:

$ 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.31

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.31
File Size Uploaded
drgn-0.0.31.tar.gz 1.5 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for drgn 0.0.31
File
drgn-0.0.31-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.31-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.31-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.31-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.31-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.31-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.31-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.31-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.31-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: 84.3 MB

Release files / drgn-0.0.31.tar.gz

Download URL drgn-0.0.31.tar.gz
Size 1.5 MB
Tags Source
SHA-256 checksum
How to use checksums
b2772f697dee6b086316bf98dc19c7eb99a28195789cd221b718410ae49e146a
BLAKE2b-256 checksum
How to use checksums
ff6112d322473f1369eabcef00a446ef30ccaafbbab694f9f5072347a5a58ac8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

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

Download URL drgn-0.0.31-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 9.3 MB
Tags CPython 3.13 CPython 3.13 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
a7d38421991f668d9a22d1ef08e3cf6a598b1c4c9582c84118552caf4d620614
BLAKE2b-256 checksum
How to use checksums
fcec92b3cea26ab8bbdd31bccb878e51c320de61abb1b5ce2e9918d682785ce9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

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

Download URL drgn-0.0.31-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 9.2 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
0aaedd9f302d153ef046a17ef0125064604c297c386618a49fd241eb1fdfcf67
BLAKE2b-256 checksum
How to use checksums
ea7309bd48a4031554b14f30bb7b6c26225f5b6ed1ad266904021a794e447e87
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

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

Download URL drgn-0.0.31-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 9.2 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
c170fb86ee888cba1f454522139aa99ee4b25376f5c292eafdecd3f5941b7d1f
BLAKE2b-256 checksum
How to use checksums
09a0b03c0f6e06c964c756318bf26e8f8e7b769bc91a683be69587073fa78be0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

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

Download URL drgn-0.0.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 9.2 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
d1ecc373886e1ce14cb3148bed4ce2e0e748f363badc138e4376923d6f754350
BLAKE2b-256 checksum
How to use checksums
94d2540f180e88aa65c89c160cc2027311aedf9561225d49fd7c86ef8d1e4282
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

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

Download URL drgn-0.0.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 9.2 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
728426c4ecfed665ff485a0ec829fd2c6f48715370e5dda4095eadf643b86601
BLAKE2b-256 checksum
How to use checksums
900606b21399976eeced73e4901bf13f0fd58b538490f5d56a3c098d67db321b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

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

Download URL drgn-0.0.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 9.2 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
59f82a25d491e6740e812dfa92b2dbafc604d6022b26dcdf88d5e5d8c3831221
BLAKE2b-256 checksum
How to use checksums
2b6fab0e230e6f4bf227b95f3928dcf1a264a1d4a088aea789b6a60c06675646
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

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

Download URL drgn-0.0.31-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 9.2 MB
Tags CPython 3.8 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
ebdda2a2203e9e2d7a738cd87a932ca1e3e2c70a64cf331f58531d468edc3f8e
BLAKE2b-256 checksum
How to use checksums
e26a34054eca2ca0e3ca41d9f1e9f631e987c825951bea0a600d07a550939bb1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

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

Download URL drgn-0.0.31-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 9.1 MB
Tags CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
7b649dc8593ace9bc23b01f15982062f10359442c2ec34463d86b787099a8dc7
BLAKE2b-256 checksum
How to use checksums
58e92cb8dff34938f8c060f4b67267f622ad57c403ef5b4150135c9f1c27b4f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

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

Download URL drgn-0.0.31-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 9.1 MB
Tags CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
04f68668bb1c2e83c028a61e8acd16f29e07fb22c6412df0e008eec0d50b0948
BLAKE2b-256 checksum
How to use checksums
bceb193296d423a824112c624065a00575849818d5e4f8a70bdd466d1d97842b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2
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