Use when explaining System V AMD64, ARM AAPCS, RISC-V psABI, stack frames, variadic calls, or FFI register rules. Not for the Rust FFI binding layer: use rust-ffi.
日本語の概要は準備中です。原文の説明を表示しています。
Use when inspecting .debug_info or .debug_line sections with dwarfdump or readelf, working with split-DWARF .dwo files, setting up debuginfod, or checking how LTO and stripping affect debug info.
インストール方法を見るインストールする前に、エージェントに与えられる指示の中身を確認できます。
| Field | Bound contract |
|---|---|
| Trigger | DWARF sections in an ELF binary need listing or reading, .dwo split files need producing or packaging, debuginfod needs configuring, or LTO and stripping change what debug info survives. |
| Authority | Read-only. Emits analysis and commands for the operator to run on the target; no file writes, no rollback needed. No remote mutation. |
| Side effect | Inspection commands and a verdict in chat. Nothing is written. |
| Done | The debug info question is answered from the binary's own sections, or the missing piece (.dwo, debug package, build ID) is named. |
readelf and llvm-dwarfdump cover most queries; dwarfdump and eu-strip come from libdwarf and elfutils packages.List the DWARF sections.
readelf -S prog | grep "\.debug"
| Section | Contents |
|---|---|
.debug_info | DIEs: types, variables, functions |
.debug_abbrev | Abbreviation table for .debug_info |
.debug_line | Source line to address mapping |
.debug_str | Identifier strings |
.debug_loc / .debug_loclists | Variable location expressions (DWARF 4 / DWARF 5) |
.debug_ranges / .debug_rnglists | Non-contiguous address ranges (DWARF 4 / DWARF 5) |
.debug_aranges | Address to compilation unit lookup |
.debug_pubnames / .debug_names | Global name index (DWARF 4 / DWARF 5) |
.debug_frame | DWARF call frame information; .eh_frame is the runtime unwinding variant |
.debug_addr | Address table (DWARF 5) |
.debug_line_str | Line-table strings (DWARF 5) |
Done when: the present sections are listed and named.
Inspect the contents.
readelf --debug-dump=info prog # DIEs
readelf --debug-dump=lines prog # line table
llvm-dwarfdump --debug-info prog # more readable DIE dump
llvm-dwarfdump --statistics prog # debug info size and quality metrics
dwarfdump prog # full dump, when libdwarf's dwarfdump is installed
Done when: the target section's contents are on screen.
Read the DIE structure. Debug info is a tree of Debug Information Entries. Each DIE has a tag (DW_TAG_*) and attributes (DW_AT_*).
DW_TAG_compile_unit
DW_AT_producer : "GNU C17 13.2.0"
DW_AT_name : "main.c"
DW_AT_comp_dir : "/home/user/project"
DW_TAG_subprogram
DW_AT_name : "add"
DW_AT_low_pc : 0x401130 # function start
DW_AT_high_pc : 0x401150 # function end
DW_TAG_formal_parameter
DW_AT_name : "a"
DW_AT_location : DW_OP_reg5 # x86-64 register rdi
Common tags: compile_unit, subprogram, variable, formal_parameter, typedef, structure_type, member, array_type, pointer_type, base_type. Common attributes: name, type, location, low_pc, high_pc, byte_size, encoding, file, line. Done when: the DIE of interest is located and its attributes are read.
Work with split DWARF. -gsplit-dwarf writes debug info to .dwo sidecars so the linker never processes it.
gcc -g -gsplit-dwarf -O2 -c main.c -o main.o # main.o plus main.dwo
gcc main.o -o prog # prog references main.dwo
dwarfdump prog | grep dwo_name # DW_AT_GNU_dwo_name holds the path
dwp -o prog.dwp prog # GNU: pack .dwo files into one .dwp
llvm-dwp -o prog.dwp prog # LLVM equivalent
GDB resolves .dwo and .dwp files placed next to the binary. Done when: the binary links without debug input and GDB still resolves symbols.
Configure debuginfod for remote symbols.
export DEBUGINFOD_URLS="https://debuginfod.elfutils.org/"
gdb /usr/bin/git # fetches missing debug info over HTTP
debuginfod-find debuginfo <build-id-or-path>
debuginfod-find source <build-id> /path/to/source.c
(gdb) set debuginfod enabled on
(gdb) set debuginfod verbose 1
Run a private server with debuginfod -d /var/cache/debuginfod -p 8002 /path/to/binaries/ and point DEBUGINFOD_URLS at http://localhost:8002. Done when: GDB fetches symbols for a stripped system binary.
Judge LTO's effect. -flto generates DWARF after link-time optimization, so merged, inlined, or eliminated entities lose their debug entries. -flto=thin (Clang) keeps more. For maximum debug info, build a separate -Og -g binary without LTO. In Rust, the dev profile already defaults to lto = "off"; enabling lto in a release profile trades debug detail for optimization. Done when: the LTO/debug tradeoff is stated for the build in question.
Strip binaries while keeping symbols.
objcopy --only-keep-debug prog prog.debug
strip --strip-debug prog
objcopy --add-gnu-debuglink=prog.debug prog # GDB finds prog.debug automatically
eu-strip -f prog.debug prog # elfutils: split in one step
readelf -n prog | grep -i debug # verify the link
llvm-dwarfdump --statistics prog # check what debug info remains
size --format=SysV prog # section sizes
Done when: the stripped binary resolves symbols through its debug link or a symbol store.
readelf -S shows no .debug_* sections: the binary was built without -g or was stripped. Rebuild with -g or locate the matching debug file by build ID..dwo files not found: they must sit next to the objects or be packed into a .dwp. Check DW_AT_GNU_dwo_name for the expected path.DEBUGINFOD_URLS is set in the environment GDB inherits, and that the distro runs a server for that package.-flto, or debug the -Og build instead.readelf or llvm-dwarfdump, or rebuild with -gdwarf-4.An answer grounded in the binary's own sections: the DIE or line-table entry found, the .dwo/debuginfod path configured, or the named reason the debug info is absent.
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when explaining System V AMD64, ARM AAPCS, RISC-V psABI, stack frames, variadic calls, or FFI register rules. Not for the Rust FFI binding layer: use rust-ffi.
日本語の概要は準備中です。原文の説明を表示しています。
Use when configuring ADC sampling time, DMA-driven ADC, calibration, or DAC channel setup on bare-metal MCUs. Not for the DMA stream itself: use dma-baremetal.
日本語の概要は準備中です。原文の説明を表示しています。
Use when creating AF_XDP sockets, configuring UMEM and XSK rings, writing an XDP redirect program, or choosing copy versus zero-copy mode. Not for full kernel bypass: use dpdk.
日本語の概要は準備中です。原文の説明を表示しています。
Use when a completed session needs an agent-environment retrospective. Not for an engineering retrospective from telemetry: use engineering-retrospective.
日本語の概要は準備中です。原文の説明を表示しています。
Use when a redacted, trimmed agent transcript must be appended to a GitHub PR or issue body, with human approval and preview. Not for automated or model-initiated insertion.
日本語の概要は準備中です。原文の説明を表示しています。
Use when a repo needs agent setup, AGENTS.md added or made lean, CLAUDE.md audited, or agent instructions scored or pruned. Not for remote, credential, publish, deploy, or irreversible changes.
日本語の概要は準備中です。原文の説明を表示しています。