🛠️ Tools
개발 도구 — Vim, 디버거, 프로파일러, 빌드
Postmortem Debugging
postmortem
Core Dump 생성 메커니즘 — kernel의 dump path 분석
Linux core dump가 어떻게 만들어지나. ulimit, core_pattern, dumpable, systemd-coredump.
ELF Core 파일 포맷 분해 — NT_PRSTATUS·NT_PRPSINFO·NT_FILE
core dump의 내부 구조. PT_NOTE/PT_LOAD, NT_PRSTATUS, NT_FILE, NT_AUXV.
GDB로 Core 분석 — backtrace·info threads·py 활용
core 열기, siginfo 해독, 콜스택 분석, 변수 검사, 자주 만나는 패턴.
포스트모템 자동화 — debuginfod·Minidump 파이프라인
build-id로 자동 debuginfo 매칭, Breakpad/crashpad minidump, CI 자동 사후 분석.
CXL 디바이스 Core Dump 분석 — Device State·Mailbox Log·NUMA 토폴로지
CXL 디바이스가 fail한 후 core dump에서 device state·mailbox 명령 이력·NUMA 토폴로지를 복원하는 분석 흐름.
CXL Fabric Postmortem — 분산 디바이스·Multi-Host Pool 장애 추적
CXL 2.0/3.x fabric에서 multi-host pooled 디바이스 fail 분석 — Fabric Manager log·LD 상태·cross-host correlation.
Memory Diagnostics
memory
리눅스 메모리 회계 — RSS·VSS·PSS·smaps 해석
프로세스 메모리의 실제 정체. VSS vs RSS vs PSS, /proc/[pid]/{status,smaps}.
heaptrack 분석 — 가벼운 heap profiler 활용
Valgrind보다 빠른 heap profiler. KDE 출신, 운영 환경에도 적용 가능.
jemalloc·tcmalloc Profiling — 운영 allocator의 진단 기능
표준 glibc malloc 대체 + 내장 profiler. pprof로 시각화.
glibc 메모리 도구 — mtrace·mcheck·MALLOC_CHECK_
별 라이브러리 없이 glibc 만으로 메모리 디버깅. mtrace, mcheck, MALLOC_CHECK_.
운영 메모리 누수 진단 — long-running 프로세스의 진단 전략
장기 실행 서비스의 누수 추적. /proc 모니터링, cgroup memory.max, OOM 회피.
CXL 메모리 진단 — RAS·Poison List·Media Error 추적
CXL.mem 디바이스 메모리 상태 진단 — cxl-cli·poison list·event log로 RAS 이벤트 추적, NUMA node별 사용량 분석.
Tiered Memory 진단 — DAMON·DAMOS·Promotion/Demotion 디버깅
DDR + CXL.mem 계층화 환경에서 DAMON·DAMOS 동작 분석 — page promotion/demotion 추적, hot/cold 분류 디버깅.
Kernel Debugging
kernel
리눅스 커널 디버깅 개론 — User/Kernel 경계와 도구 선택
user-space와 kernel-space 디버깅의 차이. /proc, kallsyms, kernel debug info.
printk·dmesg·dynamic_debug 분석 — 커널 로그 추적
커널 로깅의 모든 것. log level, ring buffer, ratelimit, 런타임 토글.
ftrace와 tracepoints 활용 — 커널 함수 호출 트레이싱
함수 단위 trace, 이벤트 trace, 정적 tracepoint, function graph.
eBPF·bpftrace로 커널 디버깅 — 동적 관측의 신세대
kprobe/uprobe/tracepoint 위에 표현력 있는 trace 언어. bpftrace 원-라이너부터 BCC까지.
kdb·kgdb 인터랙티브 커널 디버깅 — Source-level Step·Breakpoint
별 머신 또는 시리얼로 커널을 step-debug. kgdb 셋업, gdb 연결, 실전 흐름.
crash와 drgn 분석 — vmcore에서 커널 상태 복원하기
kdump로 만든 vmcore를 사후 분석. crash 명령, drgn Python API, 실전 흐름.
Kernel Panic·Oops 메시지 해석 — Decoder Ring 만들기
dmesg 한 줄로 정확한 위치 찾기. RIP, Call Trace, BUG, Tainted 디코딩.
CXL 커널 드라이버 디버깅 — ftrace·bpftrace·drgn 활용
Linux drivers/cxl/ 서브시스템 디버깅 — ftrace로 probe 흐름 추적, bpftrace로 mailbox 명령 캡처, drgn으로 커널 상태 검사.
drivers/cxl 코드 분석 — 진입점부터 sysfs까지
Linux kernel drivers/cxl/ 디렉터리 — 모듈별 entry point·핵심 자료구조·sysfs interface 코드 워크스루.
Embedded Debugging
embedded
GDB Remote Serial Protocol 분석 — 디버거-타겟 통신 메커니즘
GDB가 원격 스텁과 주고받는 ASCII 패킷의 모든 것. 패킷 형식, qSupported 협상, vCont, 멀티 패킷, RLE.
JTAG·SWD·CoreSight 분석 — ARM 디버그 인터페이스 비교
TAP 상태 머신, SWD 패킷, ARM CoreSight (DAP/FPB/DWT/ITM/ETM) 회로 구조.
OpenOCD 심화 분석 — Configuration·Adapter·Target 통합
TCL 인터프리터, target/interface 설정, flash driver, custom 명령, multi-core.
J-Link 도구 체인 분석 — JLinkExe·RTT·GDB Server 활용
JLinkGDBServer, JLinkExe, J-Run, J-Trace, Unlimited Flash BP, RTT, Ozone.
ELF와 MAP 파일 분석 — 베어메탈 메모리 레이아웃 추적
ELF의 LMA/VMA, 링커 스크립트, MAP 파일로 메모리 진단, startup 코드의 정체.
임베디드 Trace 비교 — RTT·ITM·SWO·ETM·Semihosting 선택
printf 없이 펌웨어 로그·trace 빼내기. 다섯 가지 방법 비교 + 코드 예제.
RTOS-aware 디버깅과 트러블슈팅 — Task·Queue·Stack 분석
FreeRTOS/Zephyr task 콜스택, Hardfault 분석, MPU, 신호 무결성, 보안 lock 해제.
CXL Link Training 디버깅 — LTSSM 상태와 Protocol Analyzer 활용
CXL 링크가 안 올라올 때 LTSSM 상태 분석, Protocol Analyzer 캡처, lspci·cxl-cli·dmesg 진단 흐름.
CXL 디바이스 트러블슈팅 — RAS 이벤트·Poison List·Media Error 추적
CXL 디바이스의 RAS(Reliability·Availability·Serviceability) 이벤트와 poison list·media error를 추적하는 진단 흐름.
GNU Make
gnu-make
GNU Make 소개와 첫 Makefile — 설치부터 첫 빌드까지
GNU Make의 역할, 설치 방법, 첫 Makefile 작성과 실행.
Make 규칙 분석 — 타겟·의존성·레시피의 평가
Makefile 규칙의 구성 요소와 동작 방식 — 다중 타겟, order-only, 레시피 접두사, 이중 콜론까지.
Make 변수와 자동 변수 — $@·$<·$^·재귀 vs 단순 할당
Make 변수의 두 가지 확장 방식, 자동 변수, 우선순위 — 같은 코드가 미묘하게 다르게 도는 9할의 원인.
Make 패턴 규칙과 암시적 규칙 — % 매칭 동작
% 한 글자로 100개의 규칙을 줄이는 패턴 규칙, Make 내장 암시적 규칙, 그리고 둘의 충돌·우선순위.
Make 함수 분석 — wildcard·patsubst·foreach·shell
내장 함수로 텍스트·파일·조건을 다루기 — wildcard / patsubst / filter / shell / foreach / call / eval.
Make 조건문과 include — ifeq·ifdef·include·-include
파싱 시점 조건 분기, Makefile 분할, 그리고 -MMD -MP로 헤더 의존성을 자동 추적하는 표준 패턴.
실전 Makefile 예제 — C/C++ 프로젝트용 기본 골격
기본 C/C++부터 라이브러리, 크로스 컴파일, 테스트 통합까지 — 실제 프로젝트에 그대로 쓰는 Makefile 패턴.
CMake
cmake
CMake 소개와 첫 프로젝트 — 설치부터 빌드까지
왜 메타 빌드 시스템이 필요한가, CMake가 그 자리에서 무엇을 하는가, 그리고 5줄 짜리 첫 프로젝트.
CMake 언어 분석 — 변수·조건문·함수의 동작
CMake 스크립트의 기본 문법: 변수, 리스트, 조건문, 반복문, 함수.
CMake 타겟과 라이브러리 — INTERFACE·PUBLIC·PRIVATE 전파
Modern CMake의 핵심: 타겟 중심 접근법과 라이브러리 생성.
CMake 옵션과 캐시 변수 — option·set·cache type 분석
사용자 설정 가능한 빌드 옵션과 CMake 캐시 시스템.
CMake find_package와 외부 의존성 — Module·Config·FetchContent
외부 라이브러리 탐색, FetchContent, 그리고 의존성 관리.
CMake 테스트와 CTest — add_test·테스트 fixture·리포트
CMake 테스트 프레임워크 CTest와 Google Test, Catch2 연동 방법.
CMake 설치와 패키징 — install·EXPORT·CPack
install 명령으로 빌드 결과물 배포, CPack으로 플랫폼별 패키지 생성.
Modern CMake 베스트 프랙티스 — target_* 중심 설계
타겟 중심 접근법, 피해야 할 안티패턴, 대규모 프로젝트 구성 전략.
Modern CMake 고급 — BUILD/INSTALL_INTERFACE·Presets·cmake -E
Modern CMake의 고급 도구 모음 — 자주 안 보이지만 실무에서 결정적인 기능들.
Python Debugging
python
pdb 기본 사용법과 breakpoint() 빌트인 — 스크립트 디버깅
표준 라이브러리 pdb. breakpoint(), 핵심 명령, ipdb, postmortem.
debugpy 활용 — VSCode·PyCharm·원격 attach 통합
debugpy로 IDE 디버깅, 원격 프로세스 attach, justMyCode, 멀티프로세스.
asyncio 디버깅 — 짧은 콜스택과 slow callback 추적
코루틴 콜스택 추적, asyncio debug=True, slow callback, race condition.
py-spy 운영 분석 — 코드 수정 없이 프로세스 검사
py-spy로 콜스택 dump, 샘플링 프로파일링, flamegraph, 외부 attach.
Python faulthandler·tracemalloc·objgraph — 죽음과 누수 진단
세그폴트 트레이스백, 메모리 할당 추적, 객체 그래프 시각화.
Sanitizers
sanitizers
Sanitizer 종류 비교 — ASan·UBSan·LSan·TSan·MSan
C/C++ 런타임 검사 도구 Sanitizer 계열의 역할, 종류별 선택, 실무 도입 순서.
ASan과 UBSan 실전 설정 — 컴파일 옵션과 런타임 동작
황금 조합 -fsanitize=address,undefined를 실제로 켜고 운영하는 자세한 방법 — 옵션, 환경 변수, suppression, 흔한 오탐.
LSan 누수 분석 — Stop-the-world Leak Detection 메커니즘
LeakSanitizer로 메모리 누수 추적 — 보고서 해석, suppression, 일회성·반복 분석 패턴.
TSan으로 데이터 레이스 디버깅 — Happens-before 추적
ThreadSanitizer로 멀티스레드 버그 추적 — happens-before 모델, false positive, atomic·mutex 통합.
Sanitizer를 CMake와 CI에 통합 — Multi-config 빌드 전략
Sanitizer 빌드를 프로젝트에 자연스럽게 통합 — CMake 옵션, GitHub Actions, GitLab CI 실전 예시.
Valgrind
valgrind
Valgrind 도구 개요 — Memcheck·Helgrind·DRD 비교
Sanitizer 시대에도 Valgrind가 살아남은 이유, 세 핵심 도구의 역할, 도입 자리.
Valgrind Memcheck 실전 — 메모리 오류 탐지 워크플로
Memcheck의 모든 핵심 옵션 — leak-check, track-origins, error-limit, 그리고 비용 vs 정확도 트레이드오프.
Valgrind Leak Report 분석 — definitely·indirectly·possibly·still reachable
Memcheck의 네 가지 누수 분류 — definitely/indirectly/possibly/still reachable — 정확한 의미와 우선순위.
Valgrind Helgrind와 DRD — 멀티스레드 레이스 진단
Valgrind의 두 동시성 분석 도구 비교 — Helgrind의 락 추적과 DRD의 vector clock, 언제 무엇을.
Valgrind Suppression과 실무 운용 — 노이즈 제거와 CI 통합
Valgrind suppression 문법, 외부 라이브러리 우회, Sanitizer와의 분담, CI 통합 실전.
GDB Extension and IDE
gdb-extension
GDB Python API 입문 — Value·Type·Frame 객체 활용
GDB Python 인터프리터, 핵심 객체(Value/Type/Frame/Symbol), 디버기 데이터 조작.
GDB 커스텀 명령·Convenience Function·Event 훅·Breakpoint
사용자 정의 명령, $name(...) 함수, stop hook, 자동 BP 액션 패턴.
GDB Pretty-Printer 심화 — STL·커스텀 타입 시각화
to_string / children / display_hint, MI 출력, auto-load, libstdc++ printer 분석.
GDB FrameDecorator·Unwinder — 콜스택 가공과 JIT 지원
Frame filter, FrameDecorator로 콜스택 변형, custom unwinder로 JIT 코드 추적.
GDB MI와 DAP 프로토콜 — IDE 통합 인터페이스 분석
IDE ↔ 디버거 표준 — GDB/MI와 Debug Adapter Protocol의 정체.
GDB 프런트엔드 비교 — TUI·cgdb·dashboard·gef·IDE
터미널부터 IDE까지. 내장 TUI, cgdb, gdb-dashboard, gef/pwndbg, VSCode, nvim-dap, Cortex-Debug 비교.
GDB and LLDB
gdb-lldb
GDB vs LLDB 분석 — 두 디버거의 설치·차이·선택 기준
네이티브 디버거의 메커니즘, gdb·lldb 차이, 설치, 첫 세션.
GDB·LLDB 기본 명령 — break·step·next·print 동작 비교
디버거에서 매일 쓰는 핵심 명령 10가지 — 정확한 의미와 자주 쓰는 변형.
디버거로 상태 들여다보기 — 변수·메모리·레지스터·STL 추적
print 만으로 부족한 자리들 — x/memory examine, ptype, STL 컨테이너, pretty printer.
GDB·LLDB Backtrace와 프레임 이동 — Call Stack 분석
bt·frame·up·down — 호출 스택 분석, 프레임 안 변수 조사, 인라인 함수 처리.
Breakpoint와 Watchpoint 분석 — Conditional·Hardware·Catchpoint
조건부 break, watchpoint(변수 변경 추적), catchpoint, hardware vs software.
멀티스레드·멀티프로세스 디버깅 — Non-Stop·Scheduler-Locking·Fork
thread / process apply. scheduler-locking. follow-fork. rr 시간 역행 디버깅.
Core Dump 분석 기법 — gcore·coredumpctl·디버거 활용
ulimit / core_pattern. gdb -c. ELF core 포맷, NT_PRSTATUS, systemd-coredump.
GDB 원격 디버깅 — gdbserver·OpenOCD·J-Link 통합
다른 머신·MCU를 GDB로. RSP, gdbserver, OpenOCD, J-Link, JTAG/SWD, ARM CoreSight.
GDB·LLDB Python 스크립팅 — Pretty-Printer·Custom Command
GDB / LLDB Python API. pretty-printer 작성, 커스텀 명령, 자동화, MI.
GDB·LLDB TUI와 프런트엔드 — gdb-dashboard·gef·pwndbg·VS Code
TUI 모드, cgdb, gdb-dashboard, gef/pwndbg, VSCode, nvim-dap, DAP 프로토콜.
GDB·LLDB 실전 팁 — STL·최적화 코드·시간 역행 디버깅
STL pretty-printers, -O2 디버깅, .gdbinit 추천, rr time-travel. 시리즈 마무리.
DWARF 디버그 정보 — 디버거가 변수와 라인을 찾는 방식
DWARF 표준, DIE / abbrev / line / location, expression VM, CFI, split-DWARF.
DWARF and ELF Internals
dwarf-elf
ELF 포맷 분해 — Section·Segment·Symbol Table 구조 추적
ELF 헤더, Program Header / Section Header, dynamic linking, build-id.
DWARF 디버그 정보 분해 — DIE 트리와 .debug_abbrev
DWARF의 정체. DIE/abbrev 인코딩, 컴파일 유닛, TAG/AT/FORM 카탈로그.
DWARF .debug_line 분석 — Source-to-PC 매핑 바이트코드 VM
DWARF 줄 정보의 정체. 상태 머신, 표준/확장 opcode, file table, addr2line의 내부.
DWARF .debug_loc 분석 — Variable Location Expression VM
변수가 어디 있는지의 표현. 스택 머신 opcode, location list, DW_OP_entry_value.
DWARF Call Frame Information — .debug_frame과 .eh_frame 분해
콜스택 풀기의 정체. CIE/FDE, CFA, register rule, .eh_frame_hdr 이진 탐색.
DWARF 도구 생태계 — split-DWARF·dwz·debuginfod·pyelftools
큰 디버그 정보 다루기. 분리·압축·네트워크 다운로드·자체 도구 작성.
Driver-RTL Co-simulation
driver-cosim
Pre-Silicon Driver Verification — RTL Co-simulation이 푸는 문제
Silicon 없이 driver 검증 — co-simulation의 의미.
SystemVerilog DPI-C 기초 — C와 RTL을 잇는 표준 인터페이스
Import·export·data type — SV와 C 사이의 다리.
Verilator 분석 — Open Source SystemVerilog Simulator
RTL → C++ — driver code와 link되는 가장 빠른 simulator.
CocoTB 분석 — Python으로 작성하는 RTL Testbench
Python coroutine으로 RTL testbench — productivity gain.
SystemC TLM 분석 — Transaction-Level Modeling으로 빠른 검증
Cycle-accurate 너머 — high-speed virtual platform.
C로 구현하는 Bus Functional Model — Driver 검증용 BFM 설계
Driver와 RTL 사이의 protocol-aware adapter.
UVM C Reference Model 통합 — DUT와 황금 모델 비교 검증
UVM testbench의 reference model을 C로 — driver와 공유.
End-to-End Driver + RTL Co-simulation — 실전 통합 흐름
Verilator + DPI-C + Linux driver — 통합 cosim flow.