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
  • Arch Linux

    Install the drgn package from the AUR.

  • Debian >= 12 (Bookworm)

    $ sudo apt install python3-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

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

    Replace dnf with yum for RHEL/CentOS < 8.

  • 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 libtool make pkgconf python python-pip python-setuptools

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

  • 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.27

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.27
File Size Uploaded
drgn-0.0.27.tar.gz 1.2 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for drgn 0.0.27
File
drgn-0.0.27-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.27-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.27-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.27-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.27-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.27-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.27-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.27-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.27-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: 43.1 MB

Release files / drgn-0.0.27.tar.gz

Download URL drgn-0.0.27.tar.gz
Size 1.2 MB
Tags Source
SHA-256 checksum
How to use checksums
4e44a14bc0b9ba4517029584f3875827be07f757dddd9326f3b7f388dc51e05a
BLAKE2b-256 checksum
How to use checksums
1972205c169e2c8374096d9c23ea667b5eab8e2e0556ae08e53c9458e46b3ebc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.3

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

Download URL drgn-0.0.27-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.7 MB
Tags CPython 3.13 CPython 3.13 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
bff4e8b72b56ead575419a05c1e10af53735be0ab6b7b38dbd28f61e4a1055b1
BLAKE2b-256 checksum
How to use checksums
18ba976757848c41d7a094a5036b4e4fcacd733870dbf8b125cae6fd49e24098
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.3

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

Download URL drgn-0.0.27-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.7 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
3d70e559ef5c9c3c218dd145a53fa8ac929fff29e657703e043e46c5fda56fa5
BLAKE2b-256 checksum
How to use checksums
0fc75498eb645f933d454f1edfa403cbfe3d5fcd51fdfebf4c406f6a5aa897e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.3

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

Download URL drgn-0.0.27-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.7 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
f9a273e571b618c0c41bb0dd3166753400c50a0260e35334efa766b91288a68e
BLAKE2b-256 checksum
How to use checksums
8f3037f99a1a60e2922085e1a045d05fae98162b112d52a6465e00184c4dae34
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.3

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

Download URL drgn-0.0.27-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.7 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
4baa0c54c71798859df2d7b2e90330b87584ca2cca1ab7bb59d37f102bbbb1ef
BLAKE2b-256 checksum
How to use checksums
d56a044ac3f8f1977a2952e8c3f1def14fceed0bad233074f8e4b3d8888148db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.3

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

Download URL drgn-0.0.27-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.7 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
d401d9d650cda961939c912aba40b3f292492a46c6097fa8dcadc3de5d1b8e61
BLAKE2b-256 checksum
How to use checksums
ebf27ca4d5493a96a9aaa0cbeb37edd99c9213f92e4b08480cde7c5e2c7b972d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.3

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

Download URL drgn-0.0.27-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.7 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
fdb5017e1078274847f2e394023d76a70f95e8c431e83851fbab08ec3dc2a37d
BLAKE2b-256 checksum
How to use checksums
c244aa34440fe56a6a43451280c9a02267b923b3c3cba41a7c55bfbd8f3aa191
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.3

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

Download URL drgn-0.0.27-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.6 MB
Tags CPython 3.8 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
bfc5bd6ffb27ec0d9e11d7e9e532419e28b11586d013683ac28cdb51058cefcf
BLAKE2b-256 checksum
How to use checksums
6f041e9ca15cb2c14329ba3a5ad9f9649eec2bab73ee353004507d1d3ebf27ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.3

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

Download URL drgn-0.0.27-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.6 MB
Tags CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
23e8ead2ecd4d1a46969c8e45f22589dd9116ccb69d082d6a5aa26baf8e54773
BLAKE2b-256 checksum
How to use checksums
3413a020032f2dbb8fec6db4b422856ff81bd2badb721b3f54d61a0f9737b3e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.3

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

Download URL drgn-0.0.27-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.6 MB
Tags CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
3478d1bcab65a2d46019e399edb12b9cba7a9654568160e87a3422f6a9856d17
BLAKE2b-256 checksum
How to use checksums
2909f6bed3567d998dc3afc21dc149250a273e1bc60e0fb1065e40e1f50d377c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.3
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