An open API service indexing awesome lists of open source software.

https://github.com/sdimitro/sdb

The Slick Debugger
https://github.com/sdimitro/sdb

coredump crashdump debugger drgn kernel

Last synced: 5 months ago
JSON representation

The Slick Debugger

Awesome Lists containing this project

README

          





SDB


CI
PyPI
Python Versions
License

### Installation

#### From PyPI

```bash
pip install sdb-debugger
```

#### From Source

Ensure you have the following dependencies:
* Python 3.10 or newer
* [libkdumpfile](https://github.com/ptesarik/libkdumpfile) (optional - needed for kdump-compressed crash dumps)
* [drgn](https://github.com/osandov/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`:
```bash
git clone https://github.com/sdimitro/sdb.git
cd sdb
pip install .
```

For development installation (editable mode with dev dependencies):
```bash
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 `.
For post-mortem debugging (either a kernel crash dump or a userland core dump), use `sudo sdb `.

```
$ 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:
```bash
pip install -e ".[dev]"
# Or using requirements file:
pip install -r requirements-dev.txt
```

#### Linting

```bash
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:

```bash
ruff check sdb tests
```

#### Type Checking

```bash
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

```bash
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:
```bash
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:

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

#### Integration Testing

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

```bash
.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):
```bash
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:
```bash
PYTHONPATH=$(pwd) python3 tests/integration/gen_regression_output.py
```