Skip to main content
PyPI CI Status Documentation Status https://img.shields.io/badge/code%20style-black-000000.svg

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. It is also 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.

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

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

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

    Replace dnf with yum for RHEL/CentOS < 8.

  • Debian/Ubuntu

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

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

Optionally, install libkdumpfile if you want support for the makedumpfile compressed kernel core dump format. libkdumpfile is currently only packaged on Fedora and EPEL. For other distributions, you must install it manually.

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(prog)))
11
>>> task = find_task(prog, 115)
>>> cmdline(task)
[b'findmnt', b'-p']

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

>>> trace = prog.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.

License

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

drgn is licensed under the GPLv3 or later.

Metadata

Release files for drgn 0.0.19

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.19
File Size Uploaded
drgn-0.0.19.tar.gz 989.4 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for drgn 0.0.19
File
drgn-0.0.19-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.12+ x86-64 Details
drgn-0.0.19-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.12+ x86-64 Details
drgn-0.0.19-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.12+ x86-64 Details
drgn-0.0.19-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.12+ x86-64 Details
drgn-0.0.19-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.12+ x86-64 Details

Total release size: 21.6 MB

Release files / drgn-0.0.19.tar.gz

Download URL drgn-0.0.19.tar.gz
Size 989.4 kB
Tags Source
SHA-256 checksum
How to use checksums
03e764769cc4a93d5e2c76e3e614b9b68da82704e18471471857e1d688b5c7ca
BLAKE2b-256 checksum
How to use checksums
6030eb105b94265929a65b64db155ecd6c9857e52806f20cc9c7854288be7f86
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.6.0 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.10.4

Release files / drgn-0.0.19-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl

Download URL drgn-0.0.19-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Size 4.1 MB
Tags CPython 3.10 Linux glibc 2.12+ x86-64
SHA-256 checksum
How to use checksums
71f97eefb11291301fe79033cc20c8820c7effa54471e1d23df887b98b4e1a15
BLAKE2b-256 checksum
How to use checksums
2d73d5aa3350765ecda5fd0edb13e110e5a0312cb3f6e86e7111eb68fd0897b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.6.0 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.10.4

Release files / drgn-0.0.19-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl

Download URL drgn-0.0.19-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Size 4.1 MB
Tags CPython 3.9 Linux glibc 2.12+ x86-64
SHA-256 checksum
How to use checksums
c498cbaeefce19cada30f98d9705c750b06afc430c5146416e503accc92ce363
BLAKE2b-256 checksum
How to use checksums
79bc2739f2fe9533954b170a1a9cc35464c4f5f121e22382576485cd01640b75
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.6.0 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.10.4

Release files / drgn-0.0.19-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl

Download URL drgn-0.0.19-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Size 4.1 MB
Tags CPython 3.8 Linux glibc 2.12+ x86-64
SHA-256 checksum
How to use checksums
f963598386abedc049ffb6da9d01f6b91f2e57a1687b1099340839fb67ce1016
BLAKE2b-256 checksum
How to use checksums
acd33e08e72cf8117e5468e18eb9ec92fbc62b757351e3855a9cf8458aaeb9c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.6.0 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.10.4

Release files / drgn-0.0.19-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl

Download URL drgn-0.0.19-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Size 4.1 MB
Tags CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.12+ x86-64
SHA-256 checksum
How to use checksums
d8c2524a2c8fcbef834f311b442d09ab7ecae3b65ad42e179a7cfdeac3b0c854
BLAKE2b-256 checksum
How to use checksums
07eb7be7d1a6f75df2c99c9ed0b7b2610f2311cdbd265275bf72b3e86dc933d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.6.0 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.10.4

Release files / drgn-0.0.19-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl

Download URL drgn-0.0.19-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Size 4.1 MB
Tags CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.12+ x86-64
SHA-256 checksum
How to use checksums
ee0a8a4084dff2905014ef6b30d356ab7410ec4e853ed1170abdcaefef78a4de
BLAKE2b-256 checksum
How to use checksums
f6587073fe2ae5a6c9f588f66fd81fcbcaa9a6df54f5a828b4906dabcaa398d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.6.0 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.10.4
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