core-dumps — скилл для Claude Code: разбор краш-дампов
Учит агента включать core dumps, грузить их в GDB или LLDB и снимать стек без повторного запуска упавшей программы.
npx skills add mohitmishra786/low-level-dev-skills --skill core-dumps -a claude-codeЧто делает core-dumps
Скилл описывает весь путь от падения бинарника до читаемого стека. Сначала включение дампов: ulimit -c unlimited на одну сессию, строки в /etc/security/limits.conf для постоянного режима, шаблон имени через kernel.core_pattern. На системах с systemd добавляется работа с coredumpctl — список падений, coredumpctl info, загрузка в GDB и выгрузка файла через coredumpctl dump. Для macOS отдельный раздел: дампы ложатся в /cores, а для служб под launchd лимит задаётся в plist.
Дальше разбор. В GDB агент грузит бинарник вместе с core-файлом и идёт по шагам: bt, bt full, info registers, переход по кадрам, thread apply all bt full для многопоточных падений. В LLDB то же самое через target create ./prog --core core.12345 и thread backtrace all. Если бинарник stripped, скилл показывает два пути: debuginfod с переменной DEBUGINFOD_URLS и ручной поиск debug-пакета по build ID, который снимается через readelf -n.
Отдельный раздел про сборку: objcopy --only-keep-debug, затем --add-gnu-debuglink, чтобы GDB сам находил символы. Есть и быстрый вариант без интерактивной сессии — gdb -batch с bt full и записью в файл. Учтите: debuginfod-find и eu-readelf требуют установленного пакета elfutils, а coredumpctl работает только там, где дампы собирает systemd.
Какие задачи решает
- включить запись core-дампов на Linux и macOS
- загрузить core-файл в GDB или LLDB и снять стек
- получить символы для stripped-бинарника через debuginfod
- разобрать падение многопоточного процесса по всем тредам
- выгрузить дамп из coredumpctl и отдать его коллеге
Примеры запросов агенту
- Программа упала в проде, есть core-файл — покажи стек через GDB
- Как включить core dumps на Linux, чтобы дампы писались в /tmp?
- У меня stripped-бинарник и core, помоги достать символы через debuginfod
Как установить core-dumps
1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill core-dumps -a claude-code2Вручную: положить файлы
~/.claude/skills/core-dumps/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/core-dumps/
1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill core-dumps -a codex2Вручную: положить файлы
.agents/skills/core-dumps/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill core-dumps -a cursor2Вручную: положить файлы
.cursor/skills/core-dumps/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install mohitmishra786/low-level-dev-skills core-dumps2Вручную: положить файлы
.github/skills/core-dumps/SKILL.md1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill core-dumps -a gemini-cli2Командой платформы
gemini skills install https://github.com/mohitmishra786/low-level-dev-skills --path skills/debuggers/core-dumpsВручную: положить файлы
.devin/skills/core-dumps/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill core-dumps -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о core-dumps
Как установить core-dumps в Claude?
Выполните npx skills add mohitmishra786/low-level-dev-skills --skill core-dumps -a claude-code. Скилл окажется в ~/.claude/skills/core-dumps/SKILL.md.
Что делает core-dumps?
Проводит агента по включению core-дампов, их сбору и анализу в GDB или LLDB. Программу перезапускать не нужно — всё читается из дампа.
Что нужно для работы с символами?
Либо настроенный DEBUGINFOD_URLS с установленным клиентом debuginfod, либо debug-пакет под ваш дистрибутив. Build ID снимается через readelf -n.
Исходный текст
SKILL.md · MIT
--- name: core-dumps description: Core dump analysis skill for production crash triage. Use when loading core files in GDB or LLDB, enabling core dump generation on Linux/macOS, mapping symbols with debuginfo or debuginfod, or extracting backtraces from crashes without re-running the program. Activates on queries about core files, ulimit, coredumpctl, debuginfod, crash triage, or analyzing segfaults from production binaries. --- # Core Dumps ## Purpose Guide agents through enabling, collecting, and analysing core dumps for post-mortem crash investigation without rerunning the buggy program. ## Triggers - "My program crashed in production — how do I analyse the core?" - "How do I enable core dumps on Linux?" - "I have a core file but no symbols / source" - "How do I use debuginfod to get symbols for a core?" - "coredumpctl show me the crash" ## Workflow ### 1. Enable core dumps (Linux) ```bash # Per-session (lost on logout) ulimit -c unlimited # Persistent (add to /etc/security/limits.conf) * soft core unlimited * hard core unlimited # Check current limit ulimit -c # Set core pattern (where and how cores are named) # Default: 'core' in CWD — often not useful sudo sysctl -w kernel.core_pattern=/tmp/core-%e-%p-%t # %e = executable, %p = PID, %t = timestamp # Persistent (add to /etc/sysctl.d/99-core.conf) kernel.core_pattern=/tmp/core-%e-%p-%t kernel.core_uses_pid=1 ``` ### 2. systemd/coredumpctl (modern Linux) If systemd manages core dumps (common on Ubuntu 20+, Fedora, Arch): ```bash # List recent crashes coredumpctl list # Show details of the latest crash coredumpctl info # Load latest crash in GDB coredumpctl gdb # Load specific PID crash coredumpctl gdb 12345 # Export core file coredumpctl dump -o myapp.core PID ``` Core storage location: `/var/lib/systemd/coredump/`. ### 3. Enable core dumps (macOS) ```bash # macOS uses /cores by default (must be root-writable) ulimit -c unlimited # Check ls /cores/ # launchd-launched services: set in plist # <key>HardResourceLimits</key> # <dict><key>Core</key><integer>9223372036854775807</integer></dict> ``` ### 4. Analyse a core with GDB ```bash # Load binary and core gdb ./prog core.12345 # If the binary was stripped, provide the unstripped copy gdb ./prog-with-symbols core.12345 # Essential first commands (gdb) bt # call stack (gdb) bt full # stack + locals (gdb) info registers # CPU state at crash (gdb) frame 2 # jump to interesting frame (gdb) info locals # local variables in frame (gdb) print ptr # inspect a pointer # All threads (multi-threaded crash) (gdb) thread apply all bt full ``` ### 5. Analyse a core with LLDB ```bash lldb ./prog -c core.12345 # Or lldb (lldb) target create ./prog --core core.12345 # Commands (lldb) bt (lldb) thread backtrace all (lldb) frame select 2 (lldb) frame variable ``` ### 6. Missing symbols: debuginfod `debuginfod` serves debug symbols from a central server, mapping build IDs to DWARF data. ```bash # Install client (Debian/Ubuntu) sudo apt install debuginfod # Enable (add to ~/.bashrc or /etc/environment) export DEBUGINFOD_URLS="https://debuginfod.ubuntu.com https://debuginfod.elfutils.org" # GDB auto-fetches symbols when DEBUGINFOD_URLS is set gdb ./prog core # Manually query debuginfod-find debuginfo <build-id> debuginfod-find source <build-id> /path/to/file.c ``` ### 7. Missing symbols: manual approach ```bash # Check if binary has a build ID readelf -n ./prog | grep Build # Find the correct debug package # Debian: apt install prog-dbg or prog-dbgsym # RPM: dnf install prog-debuginfo # Point GDB to debug symbols directory (gdb) set debug-file-directory /usr/lib/debug # Or use eu-readelf to dump build ID, then find .debug file eu-readelf -n ./prog find /usr/lib/debug -name "*.debug" | xargs eu-readelf -n 2>/dev/null | grep <build-id> ``` ### 8. Strip binaries and keep symbols Best practice: build with symbols, strip for distribution, keep an unstripped copy. ```bash # Build gcc -g -O2 -o prog main.c # Separate debug info objcopy --only-keep-debug prog prog.debug objcopy --strip-debug prog prog.stripped # Add a debuglink so GDB finds the debug file automatically objcopy --add-gnu-debuglink=prog.debug prog.stripped # Deploy prog.stripped; keep prog.debug in a symbols store indexed by build-id ``` ### 9. Quick triage from core without full debug session ```bash # Print backtrace non-interactively gdb -batch -ex 'bt full' -ex 'thread apply all bt full' ./prog core 2>&1 | tee crash.txt # Print registers gdb -batch -ex 'info registers' ./prog core # Check signal that caused crash gdb -batch -ex 'info signal' ./prog core ``` For a full cheatsheet covering core pattern tokens, coredumpctl, GDB/LLDB commands, debuginfod servers, and strip/symbol workflows, see [references/cheatsheet.md](references/cheatsheet.md). ## Related skills - Use `skills/debuggers/gdb` for full GDB session details - Use `skills/debuggers/lldb` for LLDB-based analysis - Use `skills/runtimes/sanitizers` to catch the bug before it reaches production - Use `skills/binaries/elf-inspection` for `readelf`, build IDs, and binary inspection
© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills