Scriptable debugger library
Project description
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 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
Install dependencies:
Arch Linux:
$ sudo pacman -S --needed gcc libelf make pkgconf python python-pip python-setuptools
Debian/Ubuntu:
$ sudo apt-get install gcc liblzma-dev libelf-dev libdw-dev make pkgconf python3 python3-dev python3-pip python3-setuptools zlib1g-dev
Note that Debian Stretch, Ubuntu Trusty, and Ubuntu Xenial (and older) ship Python versions which are too old. Python 3.6 or newer must be installed manually.
Fedora:
$ sudo dnf install elfutils-devel gcc make pkgconf python3 python3-devel python3-pip python3-setuptools
Optionally, install:
libkdumpfile if you want support for kdump-compressed kernel core dumps
Then, run:
$ sudo pip3 install drgn
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. The program must have debugging symbols available.
Then, you can access variables in the program with prog['name'], access structure members with ., use various predefined helpers, and more:
$ sudo drgn
>>> prog['init_task'].comm
(char [16])"swapper/0"
>>> d_path(fget(find_task(prog, 1), 0).f_path.address_of_())
b'/dev/null'
>>> max(task.stime for task in for_each_task(prog))
(u64)4192109975952
>>> sum(disk.gendisk.part0.nr_sects for disk in for_each_disk(prog))
(sector_t)999705952
See the user guide for more information.
License
Copyright (c) Facebook, Inc. and its affiliates.
drgn is licensed under the GPLv3 or later.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for drgn-0.0.12-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c968761d936af0483f28bd0b5750b0dbd4491c667718160ce58f9caf9908ba6a |
|
MD5 | 9c3179f8ccdd7862c915d2a803eaa552 |
|
BLAKE2b-256 | bf41c3a99d475d6e7293dc75eb3f0021e43a75b76836aea7fd7ab8b2c247535c |
Hashes for drgn-0.0.12-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d9d2bd06eb66220e097686fbf3248b388a9daa5f8b4a0c51c151377598cedf2 |
|
MD5 | 6cf7fdfdbc00581ab81e2becfc82b537 |
|
BLAKE2b-256 | b5ab959ffb251392bbcd8c2d3415ee52455109f09b2449e1868a6b88ea1ffba6 |
Hashes for drgn-0.0.12-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b66e6d5be5c3fec377f318a40c5d9131774817d7f7efdadbdbe08093a83c27f8 |
|
MD5 | db2cff0164f9022918e9a284b713a3d9 |
|
BLAKE2b-256 | ae6348689d8ab738eb1c71fcd27c6618ba8cc171f48c2a0b4eb69c3dcca95779 |
Hashes for drgn-0.0.12-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 023b76f954a4b0a7b9f8f59ea71267bb4c0f8a6ace6db6792086b0da20173731 |
|
MD5 | cb3ea245de8aa4a9237e88902f0b4e41 |
|
BLAKE2b-256 | 706561bf75bbcf0faa40107d3fdaaafed6a616a313703d2af4fb7713f8ca6c62 |
Hashes for drgn-0.0.12-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3cc00e4879744d0e768781d6d72aa46089b0afa21da4728230c204d299b6ae06 |
|
MD5 | ea14a4017c423f2cbdd2074e8b833c56 |
|
BLAKE2b-256 | 24f6c07781689f8d0f7cc1e8c1b6ce2ab6fc5960e36aba23427d157e26450db0 |