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.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.