GDB 9 ๋””๋ฒ„๊ฑฐ ๋ฆด๋ฆฌ์Šค

๋„์ž… ๋””๋ฒ„๊ฑฐ ๋ฆด๋ฆฌ์Šค GDB 9.1 (9.x ์‹œ๋ฆฌ์ฆˆ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค, ๊ฐœ๋ฐœ์—๋Š” ๋ธŒ๋žœ์น˜ 9.0์ด ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค). GDB๋Š” ๋‹ค์–‘ํ•œ ํ•˜๋“œ์›จ์–ด(i386, amd64, ARM, Power, Sparc, RISC-V)์—์„œ ๊ด‘๋ฒ”์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(Ada, C, C++, Objective-C, Pascal, Go ๋“ฑ)์— ๋Œ€ํ•œ ์†Œ์Šค ๋ ˆ๋ฒจ ๋””๋ฒ„๊น…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ) ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ํ”Œ๋žซํผ(GNU/Linux, *BSD, Unix, Windows, macOS).

์—ด์‡  ๊ฐœ๋Ÿ‰:

  • Solaris 10 ๋ฐ Cell Broadband Engine ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ง€์›์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Texas Instruments ํ”„๋กœ์„ธ์„œ(pru-*-elf)์— ์‚ฌ์šฉ๋˜๋Š” PRU(Programmable Real-time Unit) ํ•˜์œ„ ์‹œ์Šคํ…œ์˜ ์ƒˆ๋กœ์šด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๋ชจ๋“œ์—์„œ ๋””๋ฒ„๊น… ๊ธฐํ˜ธ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์‹คํ—˜ ๋ชจ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค('maint set ์ž‘์—…์ž ์Šค๋ ˆ๋“œ ๋ฌด์ œํ•œ' ์„ค์ •์„ ํ†ตํ•ด ํ™œ์„ฑํ™”๋จ).
  • ๋ช…๋ น ์ด๋ฆ„์— '.' ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Fortran์˜ ์ค‘์ฒฉ ํ•จ์ˆ˜ ๋ฐ ์„œ๋ธŒ๋ฃจํ‹ด์— ์ค‘๋‹จ์ ์„ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ†ต์ผ๋œ ์Šคํƒ€์ผ์„ ๊ฐ€์ ธ์˜ค๊ณ  ๋ช…๋ น์˜ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํƒญ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™ ์™„์„ฑ์„ ํ—ˆ์šฉํ•˜๋Š” ๋Œ€์‹œ ๋ฌธ์ž('-OPT')๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…๋ น ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ์ธํ”„๋ผ๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • "printf" ๋ฐ "eval" ๋ช…๋ น์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ ๋„ C ๋ฐ Ada ์Šคํƒ€์ผ๋กœ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ์ง€์›์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • "infosources" ๋ช…๋ น์˜ ์ •๊ทœ์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ถœ๋ ฅ ํŒŒ์ผ ํ•„ํ„ฐ๋ง์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • "์ธ์‡„ ํ”„๋ ˆ์ž„ ์ธ์ˆ˜ ์„ค์ •" ์„ค์ •์—์„œ "์กด์žฌ" ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์„ค์ • ์‹œ ์ด๋ฆ„๊ณผ ๊ฐ’์„ ํ‘œ์‹œํ•˜๋Š” ๋Œ€์‹  ์ธ์ˆ˜์— ๋Œ€ํ•ด ์กด์žฌ ํ‘œ์‹œ๊ธฐ "..."๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค์—์„œ TUI "focus", "winheight", "+", "-", ">", "<" ๋ช…๋ น์€ ์ด์ œ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
  • "print", "compile print", "backtrace", "frame" ๋ช…๋ น์˜ ๊ฒฝ์šฐ
    Apply", "tfaas" ๋ฐ "faas" ์˜ต์…˜์ด ๊ตฌํ˜„๋˜์–ด ์ „์—ญ ์„ค์ •(์˜ˆ: "set print [โ€ฆ]"๋ฅผ ํ†ตํ•ด ์„ค์ •๋œ ์„ค์ •)์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์ผ๋ถ€ ํ—ค๋”์˜ ์ถœ๋ ฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด "info type" ๋ช…๋ น์— "-q" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ ์„ค์ •์—์„œ "๋ฌด์ œํ•œ" ๊ฐ’ ๋Œ€์‹  "u"๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ๋ช…๋ น์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค:
    • ์ž์‹ ๋งŒ์˜ ์ ‘๋‘์‚ฌ ๋ช…๋ น์„ ์ •์˜ํ•˜๋ ค๋ฉด "define-prefix"๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
    • "|" ๋˜๋Š” "ํŒŒ์ดํ”„"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ์ถœ๋ ฅ์„ ์‰˜ ๋ช…๋ น์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค.
    • "with"๋Š” ์ผ์‹œ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์„ค์ •์œผ๋กœ ์ง€์ •๋œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ธŒ๋ฃจํ‹ด์ด GDB์—์„œ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ "set may-call-functions";
    • "finish" ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐ˜ํ™˜ ๊ฐ’ ํ‘œ์‹œ๋ฅผ ์ œ์–ดํ•˜๋ ค๋ฉด "set print end [on|off]"๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
    • ์ค‘์ฒฉ๋œ ๊ตฌ์กฐ์˜ ์ถœ๋ ฅ์„ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด "์ธ์‡„ ์ตœ๋Œ€ ๊นŠ์ด ์„ค์ •";
    • ์ถœ๋ ฅ ๊ฐ’์˜ ํ˜•์‹์„ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด "์ธ์‡„ ์›์‹œ ๊ฐ’ โ€‹โ€‹[on|off] ์„ค์ •"์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ๋””๋ฒ„๊ทธ ์ถœ๋ ฅ์„ ๋กœ๊ทธ ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ์ œ์–ดํ•˜๋ ค๋ฉด "logging debugredirect [on|off] ์„ค์ •"์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ์ผ๋ จ์˜ ์ƒˆ๋กœ์šด "์Šคํƒ€์ผ ์„ค์ •" ๋ช…๋ น;
    • ์Šคํƒ ํ”„๋ ˆ์ž„ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•  ๋•Œ ์ธ์‡„๋˜์–ด์•ผ ํ•˜๋Š” ์ •๋ณด๋ฅผ ์ •์˜ํ•˜๋ ค๋ฉด "set printframe-info [...]";
    • TUI(ํ…์ŠคํŠธ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค) ์ธํ„ฐํŽ˜์ด์Šค์— ์ฝ”๋“œ๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์ปดํŒฉํŠธ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด "set tui Compact-source"
    • Fortran ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋Š” "์ •๋ณด ๋ชจ๋“ˆ [...]";
    • "์›์‹œ ํ”„๋ ˆ์ž„ ์ธ์ˆ˜ ์„ค์ •/ํ‘œ์‹œ" ๋Œ€์‹  "์›์‹œ ํ”„๋ ˆ์ž„ ์ธ์ˆ˜ ์„ค์ •/ํ‘œ์‹œ" ๋ช…๋ น์ด ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค(๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋กœ ๊ณต๋ฐฑ ๋Œ€์‹  ๋Œ€์‹œ๋ฅผ ์‚ฌ์šฉํ•จ).
  • ์ œ์–ด ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐํŽ˜์ด์Šค์—์„œ GDB/MI ์ƒˆ๋กœ์šด ๋ช…๋ น "-complete", "-catch-throw", "-catch-rethrow", "-catch-catch", "-symbol-info-functions", "-symbol-info-types"๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    "-symbol-info-variables", "-symbol-info-modules", "-symbol-info-module-functions" ๋ฐ "-symbol-info-module-variables"๋Š” ๋™์ผํ•œ GDB ๋ช…๋ น๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ MI ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ์„ธ ๋ฒˆ์งธ ๋ฒ„์ „์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค(-i=mi3).

  • ์ƒˆ๋กœ์šด ๋‚ด์žฅ ๋ณ€์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค:
    • $_gdb_major, $_gdb_minor;
    • $_gdb_setting, $_gdb_setting_str, $_gdb_maint_setting,
    • $_gdb_maint_setting_str
    • $_cimag, $_creal
    • $_shell_exitcode, $_shell_exitsignal
  • gdbinit ์‹œ์Šคํ…œ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์„ฑ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์— "--with-system-gdbinit-dir" ์˜ต์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Python API์— ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ฐœ์„ ์ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. Windows์—์„œ Python 3์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์กฐ๋ฆฝ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ GDB ๋ฐ GDBserver๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด ์ตœ์†Œํ•œ GNU make 3.82๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ readline ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ ์ตœ์†Œํ•œ GNU readline 7.0์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€