π‘ λ³Έ λ¬Έμλ 'gdb νμ©νλ λ€μν λ°©λ²'μ λν΄ μ 리ν΄λμ κΈμ λλ€.
C / C++ μ½λλ₯Ό λλ²κΉ ν΄ μ€ κ°μ₯ μ λͺ ν gdbμ μ΄λ₯Ό μ¬μ©ν΄μΌν λμ λν΄ μ 리νμμΌλ μ°Έκ³ νμκΈ° λ°λλλ€. μΆκ°λ‘ νκΈ°μ μμ±ν λ§ν¬λ₯Ό ν΅ν΄ μ΄λ₯Ό νμ©νμ¬ executable, process, core dump fileμ λλ²κΉ νμ¬ λΆμνλ λ°©λ²μ λν κΈλ λ§ν¬νμμΌλ μ°Έκ³ νμκΈ° λ°λλλ€.
1. GDBλ?
μ’μ λλ²κ±°λ λ¬Έμ λ₯Ό ν΄κ²°νκ³ , νλ‘κ·Έλ¨μ μ’ λ μ½κ² κ°λ°νκ³ λ¦¬λ²μ±μ νλ λ± λ€μν λ°©μμμ κ°λ°μμκ² λμμ μ£Όλ λꡬ μ λλ€. λ§μ νλ«νΌμμ κ·Έμ λ§μΆ° μ’μ λλ²κ±°λ€μ΄ μ‘΄μ¬νκ³ κ°λ°μλ€μ μμ μκ² λ§λ λλ²κ±°λ₯Ό μ¬μ©νκ³ μμ΅λλ€. κ·Έ μ€ GDB(The GNU Debugger)λ λ§μ νλ«νΌ, x86, x86-64, arm, aarch64, mips, SPARCλ± λ€μν μν€ν μ² μμ λμνλ UNIX μμ€ν μμ μ¬μ©ν μ μλ λλ²κ±°λ‘, C / C++ λ‘ μμ±λ νλ‘κ·Έλ¨μμ μ¬μ©ν μ μμ΅λλ€.
2. μΈμ¬ GDB μ¬μ©?
μ²μ GDBλ₯Ό 곡λΆνμλ λΆλ€μ΄ λ§μ΄ μ΄λ €μ νμλκ² μΈμ GDBλ₯Ό μ¬μ©ν΄μΌ νλμ§ μ λλ€. λλ²κ±°λ μ¬λ¬λΆλ€μ΄ μμ±νλ νλ‘κ·Έλ¨μμ λ°μνλ λ¬Έμ λ₯Ό ν΄κ²°νλλ° λ§€μ° λμμ μ£Όμ§λ§ μ λλ‘ νμ©νμ§ λͺ»νλ€λ©΄ μλ¬΄λ° μΈλͺ¨κ° μμ΄μ§ν λ κ°λ¨νκ²λλ§ μΈμ μ¬μ©νλ©΄ μ’μ μ§ μ 리ν΄λ³΄κ³ μ ν©λλ€.
- νΉμ μμ , ν¬μΈνΈμμ λλ²κΉ : λλ²κΉ νκΈΈ μνλ μμ (νΉμ ν¨μ λλ 쑰건)μμ μ¬λ¬λΆλ€μ΄ μνλ λͺ¨λ μ 보λ₯Ό μ»μ μ μμ΅λλ€.
- λ¬Έμ κ° μ½κ² μ¬νλ¨ : μ΄μ ν΄κ²° μ μ½κ² μ¬νλλ κ² λ§νΌ μ’μ 건 μμ΅λλ€. GDBλ₯Ό μ΄μ©νλ©΄ κ·Έ μμ μμ λ¬Έμ μ μμΈμ λμ± λΉ λ₯΄κ³ μ½κ² ν΄κ²°ν μ μμ΅λλ€.
- λ¬Έμ μν©μ΄ μμΈ‘ν μ μμ λ : μ¬λ¬λΆλ€μ΄ λ¬Έμ κ° λλ μν©μ μλ€λ©΄, breakpointλ₯Ό μ΄μ©ν΄μ λ¬Έμ κ° λ°μνλ μν©μ λν΄ λλ²κΉ ν μ μμ΅λλ€.
μ΄ μΈμλ λ€μν λ¬Έμ μμ μ¬μ©κ°λ₯ν©λλ€. μ¬λ¬κ°μ§ κΈ°λ₯λ€μ μ¬λ¬ μμλ₯Ό ν΅ν΄ μ€λͺ
νλ©° μ΄ν΄ν μ μλλ‘ νκ² μ΅λλ€.
gdbλ₯Ό μ΄μ©ν΄ λλ²κΉ
νλ λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€. κ·ΈλΌ μ΄λ»κ² μ¬λ¬λΆλ€μ νλ‘κ·Έλ¨μ gdbλ₯Ό μ μ©ν μ μλμ§ μ΄ν΄λ³΄μ£ . νλ‘κ·Έλ¨μ gdbλ₯Ό μ΄μ©νλ λ°©λ²μ 3κ°μ§ μ
λλ€.
- gdbλ₯Ό μ΄μ©ν΄μ μ§μ νλ‘κ·Έλ¨μ μ€ννμ
- μ€νμ€μΈ νλ‘κ·Έλ¨μ gdbλ₯Ό λΆμ¬ μ¬μ©νμ
- core fileμ μ¬μ©ν΄μ λΆμνμ
μ λ΄μ©μ μλμ²λΌ ννν μ μμ κ² κ°μ΅λλ€.
gdbλ₯Ό run, attach, loadμ λ°©μμ ν΅ν΄ λΆμμ΄ κ°λνλ©° μ§μ νλ‘κ·Έλ¨μ μ€ννλ©° λΆμνλ 2κ°μ§ λ°©λ²κ³Ό μ¬ν λ€ννμΌ(core file)μ μ΄μ©ν λ°©λ²λ μμ΅λλ€. load λ°©μμ κ°λ° ν κ²μ¦ λλ λ¦΄λ¦¬μ¦ ν λ°μνλ λ¬Έμ λ₯Ό report λ°μ λ μ¬μ©νλ©΄ μ§μ λ¬Έμ λ₯Ό μ¬νν΄λ³΄μ§ μμλ λ¬Έμ μ μμΈμ μ°Ύμ μ μμ΅λλ€.
λ¨Όμ run λ°©μκ³Ό attach λ°©μμ ν΅ν΄ gdbμ κΈ°λ₯λ€μ μ΄ν΄λ³΄κ³ , μΆν load λ°©μμ λν΄ μμλ³΄κ² μ΅λλ€.
3. λ§λ¬΄λ¦¬
λ³Έ ν¬μ€ν μμλ GDBλ₯Ό μ¬μ©νλ λ°©λ²μ λν΄ μμ보μμ΅λλ€. λ€μ ν¬μ€ν μμλ κ°κ°μ μ¬μ©νλ λ°©λ² λ³ μΈλΆ μμλ₯Ό λ€μ΄ μ€λͺ νλλ‘ νκ² μ΅λλ€.
- [Linux] gdbλ‘ λλ²κΉ νλ λ°©λ²(feat. executable)
- [Linux] gdbλ‘ process/threads λλ²κΉ νλ λ°©λ²(feat. μ’λΉ νλ‘μΈμ€)
- [Linux] gdbλ‘ core dump νμΌ λλ²κΉ νλ λ°©λ²(feat. load core dump)
μ°Έκ³
- [Blog] [gdb] The GNU Debugger : 1. Introduction: https://sonseungha.tistory.com/452