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

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

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

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

Built distributions (wheels)

Table of built distributions (wheels) for drgn 0.0.28
File
drgn-0.0.28-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.28-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.28-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.28-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.28-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.28-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.28-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.28-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.28-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.7 MB

Release files / drgn-0.0.28.tar.gz

Download URL drgn-0.0.28.tar.gz
Size 1.2 MB
Tags Source
SHA-256 checksum
How to use checksums
8dbd7d777bf6e9f159b956249e2c948ad8ea93fc26f9efd93972e80010265247
BLAKE2b-256 checksum
How to use checksums
970b07c5f6eddfd3cf61fee4fd0b8f535716bb2ea1bf9617270eebb3f52ab81a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.6

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

Download URL drgn-0.0.28-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.8 MB
Tags CPython 3.13 CPython 3.13 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
4be231e3eefd04607d53cf8ee632c8a4c98419dc9e4bcd5498e029568bf32cfc
BLAKE2b-256 checksum
How to use checksums
47c14fded86d5d4c1fa0a37d49f35322691ae7810234155dfdd998345d39dffd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.6

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

Download URL drgn-0.0.28-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
2a424611b8e550d36b21e580faf2602b439f6f3a49568757f8b7f7b4176ddf66
BLAKE2b-256 checksum
How to use checksums
69bc10aa40fdd3761475adf49dbc6579414f13f5a64197e69b10acafae310098
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.6

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

Download URL drgn-0.0.28-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
6a51fbafe73ba2873e03f5d174c829813f514473f6c9b5aa6ea1f524f70f5f81
BLAKE2b-256 checksum
How to use checksums
61f1032b5c6924973f03cc2e35ea172a8760172d93db2404704b0a007b670bf1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.6

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

Download URL drgn-0.0.28-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
72460888f2a7ee43ca9a242514932ff5ca612f045af0a810ae9dc1286babbd71
BLAKE2b-256 checksum
How to use checksums
bbbc5b003aa227111dadf30cc2d42fcba919298b8e025faa6f912a3f8bf5c96f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.6

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

Download URL drgn-0.0.28-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
1c2e8dfbc24144a16cb14a1a65daa1116f768d1f1b13a8c2d2ab5d0f4750e783
BLAKE2b-256 checksum
How to use checksums
a9c3490373eeee72c2e2445e13c005d655b0d4466839e6dcca277f8b6664be7f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.6

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

Download URL drgn-0.0.28-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
80de6f1fe01ea1168d4691599ddd2e346fcae279f813924772f9fed0bbad68bd
BLAKE2b-256 checksum
How to use checksums
d23e31fd75fd42ccfe7515c2811f612281c60902cb741e855932192aa477894d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.6

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

Download URL drgn-0.0.28-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.7 MB
Tags CPython 3.8 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
e12c016dc705b67fe2230ffc10f404348ec42721bc1640b79b1867cb057f1232
BLAKE2b-256 checksum
How to use checksums
9aaf7c28791e7c8d058dffd9dd0a6c5518b4b0556bc6dc14cc8c8911a3cdeba8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.6

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

Download URL drgn-0.0.28-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.7 MB
Tags CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
a747684fad55d6112a504ab5f4f19105335c0a5c40a1bc747e12df36faf6ccf9
BLAKE2b-256 checksum
How to use checksums
c544b3d1eb0dd477afc3b53e9ac0cd80c1c1a2175b6b43b3570d8a594c65ffac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.6

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

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