{"id":37231072,"url":"https://github.com/sdimitro/sdb","last_synced_at":"2026-01-24T14:19:18.211Z","repository":{"id":262190806,"uuid":"886479664","full_name":"sdimitro/sdb","owner":"sdimitro","description":"The Slick Debugger","archived":false,"fork":false,"pushed_at":"2026-01-22T22:23:31.000Z","size":1728,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2026-01-23T15:45:22.530Z","etag":null,"topics":["coredump","crashdump","debugger","drgn","kernel"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sdimitro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-11-11T03:39:46.000Z","updated_at":"2026-01-22T22:23:36.000Z","dependencies_parsed_at":"2024-11-11T05:17:41.262Z","dependency_job_id":"7a2dcccd-3c50-471c-b924-74119de7e73e","html_url":"https://github.com/sdimitro/sdb","commit_stats":null,"previous_names":["sdimitro/sdb"],"tags_count":63,"template":false,"template_full_name":null,"purl":"pkg:github/sdimitro/sdb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdimitro%2Fsdb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdimitro%2Fsdb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdimitro%2Fsdb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdimitro%2Fsdb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sdimitro","download_url":"https://codeload.github.com/sdimitro/sdb/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdimitro%2Fsdb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28729462,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T10:24:43.181Z","status":"ssl_error","status_checked_at":"2026-01-24T10:24:36.112Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["coredump","crashdump","debugger","drgn","kernel"],"created_at":"2026-01-15T03:41:33.235Z","updated_at":"2026-01-24T14:19:18.187Z","avatar_url":"https://github.com/sdimitro.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cpicture\u003e\n        \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/sdimitro/sdb/master/assets/img/sdb-logo_white.png\"\u003e\n        \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/sdimitro/sdb/master/assets/img/sdb-logo.png\"\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/sdimitro/sdb/master/assets/img/sdb-logo.png\" alt=\"SDB\" width=\"350\" height=\"300\"\u003e\n    \u003c/picture\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/sdimitro/sdb/actions/workflows/main.yml\"\u003e\u003cimg src=\"https://github.com/sdimitro/sdb/actions/workflows/main.yml/badge.svg\" alt=\"CI\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/sdb-debugger/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/v/sdb-debugger\" alt=\"PyPI\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/sdb-debugger/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/pyversions/sdb-debugger\" alt=\"Python Versions\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/sdimitro/sdb/blob/master/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/sdimitro/sdb\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n### Installation\n\n#### From PyPI\n\n```bash\npip install sdb-debugger\n```\n\n#### From Source\n\nEnsure you have the following dependencies:\n* Python 3.10 or newer\n* [libkdumpfile](https://github.com/ptesarik/libkdumpfile) (optional - needed for kdump-compressed crash dumps)\n* [drgn](https://github.com/osandov/drgn/)\n\nNote 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`.\n\nThen install `sdb`:\n```bash\ngit clone https://github.com/sdimitro/sdb.git\ncd sdb\npip install .\n```\n\nFor development installation (editable mode with dev dependencies):\n```bash\npip install -e \".[dev]\"\n```\n\n### Quickstart\n\nRunning `sudo sdb` attaches sdb to the running kernel by default.\nTo debug a running program, run `sudo sdb -p \u003cPID\u003e`.\nFor post-mortem debugging (either a kernel crash dump or a userland core dump), use `sudo sdb \u003cvmlinux path|userland binary path\u003e \u003cdump\u003e`.\n\n```\n$ sudo sdb\nsdb\u003e find_task 1 | member comm\n(char [16])\"systemd\"\nsdb\u003e find_task 1 | stack\nTASK_STRUCT        STATE             COUNT\n==========================================\n0xffff89cea441dd00 INTERRUPTIBLE         1\n                  __schedule+0x2e5\n                  schedule+0x33\n                  schedule_hrtimeout_range_clock+0xfd\n                  schedule_hrtimeout_range+0x13\n                  ep_poll+0x40a\n                  do_epoll_wait+0xb7\n                  __x64_sys_epoll_wait+0x1e\n                  do_syscall_64+0x57\n                  entry_SYSCALL_64+0x7c\nsdb\u003e addr modules | lxlist \"struct module\" list | member name ! sort | head -n 3\n(char [56])\"aesni_intel\"\n(char [56])\"async_memcpy\"\n(char [56])\"async_pq\"\n```\n\n### Developer Testing\n\nFirst, install the development dependencies:\n```bash\npip install -e \".[dev]\"\n# Or using requirements file:\npip install -r requirements-dev.txt\n```\n\n#### Linting\n\n```bash\npylint -d duplicate-code -d invalid-name sdb\npylint -d duplicate-code -d invalid-name tests\n```\n\n#### Ruff (Fast Linting and Formatting)\n\nRuff is a fast Python linter and formatter that combines multiple tools:\n\n```bash\nruff check sdb tests\n```\n\n#### Type Checking\n\n```bash\nmypy --strict --show-error-codes -p sdb\nmypy --strict --ignore-missing-imports --show-error-codes -p tests\n```\n\nNote: pytest is required for mypy to properly type-check test decorators.\n\n#### Style Checks\n\n```bash\nyapf --diff --style google --recursive sdb\nyapf --diff --style google --recursive tests\n```\n\nIf `yapf` has suggestions you can apply them automatically by substituting\n`--diff` with `-i` like this:\n```bash\nyapf -i --style google --recursive sdb\nyapf -i --style google --recursive tests\n```\n\n#### Unit Testing\n\nUnit tests don't require crash dumps and can be run quickly:\n\n```bash\npytest -v --cov sdb --cov-report xml tests/unit\n```\n\n#### Integration Testing\n\nIntegration tests require crash/core dumps to test against live debugging scenarios:\n\n```bash\n.github/scripts/download-dumps-from-gdrive.sh\n.github/scripts/extract-dump.sh dump.201912060006.tar.lzma\n.github/scripts/extract-dump.sh dump.202303131823.tar.gz\npytest -v --cov sdb --cov-report xml tests/integration\n```\n\nTo run all tests (unit + integration):\n```bash\npytest -v --cov sdb --cov-report xml tests\n```\n\nIf you want `pytest` to stop on the first failure it encounters add\n`-x/--exitfirst` to the command.\n\nIf you've added new test commands or found mistakes in the current reference\noutput and you want to (re)generate reference output, download all crash/core\ndumps (or the specific one you want to correct) and run the following:\n```bash\nPYTHONPATH=$(pwd) python3 tests/integration/gen_regression_output.py\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsdimitro%2Fsdb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsdimitro%2Fsdb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsdimitro%2Fsdb/lists"}