Skip to main content

The Slick/Simple Debugger

Project description

SDB

CI PyPI Python Versions License

Installation

From PyPI (Recommended)

pip install sdb-debugger

From Source

Ensure you have the following dependencies:

  • Python 3.10 or newer
  • libkdumpfile (optional - needed for kdump-compressed crash dumps)
  • drgn

Note that in order for drgn to support kdump files it needs to be compiled with libkdumpfile. Unfortunately that means that users should always install libkdumpfile first before installing drgn.

Then install sdb:

git clone https://github.com/sdimitro/sdb.git
cd sdb
pip install .

For development installation (editable mode with dev dependencies):

pip install -e ".[dev]"

Quickstart

Running sudo sdb attaches sdb to the running kernel by default. To debug a running program, run sudo sdb -p <PID>. For post-mortem debugging (either a kernel crash dump or a userland core dump), use sudo sdb <vmlinux path|userland binary path> <dump>.

$ sudo sdb
sdb> find_task 1 | member comm
(char [16])"systemd"
sdb> find_task 1 | stack
TASK_STRUCT        STATE             COUNT
==========================================
0xffff89cea441dd00 INTERRUPTIBLE         1
                  __schedule+0x2e5
                  schedule+0x33
                  schedule_hrtimeout_range_clock+0xfd
                  schedule_hrtimeout_range+0x13
                  ep_poll+0x40a
                  do_epoll_wait+0xb7
                  __x64_sys_epoll_wait+0x1e
                  do_syscall_64+0x57
                  entry_SYSCALL_64+0x7c
sdb> addr modules | lxlist "struct module" list | member name ! sort | head -n 3
(char [56])"aesni_intel"
(char [56])"async_memcpy"
(char [56])"async_pq"

Developer Testing

First, install the development dependencies:

pip install -e ".[dev]"
# Or using requirements file:
pip install -r requirements-dev.txt

Linting

pylint -d duplicate-code -d invalid-name sdb
pylint -d duplicate-code -d invalid-name tests

Ruff (Fast Linting and Formatting)

Ruff is a fast Python linter and formatter that combines multiple tools:

ruff check sdb tests

Type Checking

mypy --strict --show-error-codes -p sdb
mypy --strict --ignore-missing-imports --show-error-codes -p tests

Note: pytest is required for mypy to properly type-check test decorators.

Style Checks

yapf --diff --style google --recursive sdb
yapf --diff --style google --recursive tests

If yapf has suggestions you can apply them automatically by substituting --diff with -i like this:

yapf -i --style google --recursive sdb
yapf -i --style google --recursive tests

Unit Testing

Unit tests don't require crash dumps and can be run quickly:

pytest -v --cov sdb --cov-report xml tests/unit

Integration Testing

Integration tests require crash/core dumps to test against live debugging scenarios:

.github/scripts/download-dumps-from-gdrive.sh
.github/scripts/extract-dump.sh dump.201912060006.tar.lzma
.github/scripts/extract-dump.sh dump.202303131823.tar.gz
pytest -v --cov sdb --cov-report xml tests/integration

To run all tests (unit + integration):

pytest -v --cov sdb --cov-report xml tests

If you want pytest to stop on the first failure it encounters add -x/--exitfirst to the command.

If you've added new test commands or found mistakes in the current reference output and you want to (re)generate reference output, download all crash/core dumps (or the specific one you want to correct) and run the following:

PYTHONPATH=$(pwd) python3 tests/integration/gen_regression_output.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sdb_debugger-0.2.1.tar.gz (695.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sdb_debugger-0.2.1-py3-none-any.whl (122.6 kB view details)

Uploaded Python 3

File details

Details for the file sdb_debugger-0.2.1.tar.gz.

File metadata

  • Download URL: sdb_debugger-0.2.1.tar.gz
  • Upload date:
  • Size: 695.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sdb_debugger-0.2.1.tar.gz
Algorithm Hash digest
SHA256 238474e2473ba5a7de33cedcd4891810cdfbc40d8c063f44f729fb59c8a2fddb
MD5 770f2b16941f16db07bb3ad801fd759a
BLAKE2b-256 38e9894c359e6f6a2e6dd9d2dd2d6b2f83c0d33df65a78501bccebadfd4a692a

See more details on using hashes here.

Provenance

The following attestation bundles were made for sdb_debugger-0.2.1.tar.gz:

Publisher: release.yml on sdimitro/sdb

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sdb_debugger-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: sdb_debugger-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 122.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sdb_debugger-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d1231d1a44f9e67ebc09d95f6cbecb8fc1c5f89c3637243cee7cb3a7679161e9
MD5 d4d6d56a331685b36edd51a8ac78588e
BLAKE2b-256 3e2772b71bc927de9e385a87e16910a47ff46cc72a8e60b197e0cb59892ffe3a

See more details on using hashes here.

Provenance

The following attestation bundles were made for sdb_debugger-0.2.1-py3-none-any.whl:

Publisher: release.yml on sdimitro/sdb

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page