Debugging with Xcode LLDB - Team-HGD/SniffMEET GitHub Wiki

LLDB๊ฐ€ ๋ญ”๊ฐ€์š”

LLVM + Debugger

LLVM ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ๋””๋ฒ„๊ฑฐ

LLVM(Low Level Virtual Machine)

image

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ CPU ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ปดํŒŒ์ผ ํ•˜๋Š” ๊ณผ์ •์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด (ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ข…๋ฅ˜ * CPU ์•„ํ‚คํ…์ฒ˜์˜ ์ข…๋ฅ˜) ๋งŒํผ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ƒ๊ธด๋‹ค.

LLVM์€ LLVM-IR์ด๋ผ๋Š” ์ค‘๊ฐ„ ์–ธ์–ด๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ LLVM-IR๋กœ ๋ณ€์—ญํ•˜๊ณ  ์ด LLVM-IR์„ CPU ์•„ํ‚คํ…์ฒ˜์— ๋งž๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•จ ์–ด๋ ค์šด๊ฑด ์—ฌ๊ธฐ๊นŒ์ง€!

XCode Debugging

BreakPoint

  • ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ๊ฐ€ ๊ฑธ๋ฆฐ ๋ผ์ธ ์ง์ „ ๊นŒ์ง€ ์‹คํ–‰ ๋จ
  • ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์Œ
  • ๋‹ค์–‘ํ•œ ์˜ต์…˜ ์ง€์ • ๊ฐ€๋Šฅ (์ด๋ฆ„, LLDB ์ปค๋งจ๋“œ, ๋กœ๊ทธ ์ž‘์„ฑ ๋“ฑ๋“ฑ)โ€ฆ

Debugging Bar

image

  • Disable/enable breakpoints: ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ๋“ค์„ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”
  • Pause/continue execution: ๋‹ค์Œ ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ ๊นŒ์ง€ ์ง„ํ–‰
  • Step over: ๋‹ค์Œ ๋ผ์ธ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ
  • Step into: ํ˜„์žฌ ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ๊ฐ€ ๊ฑธ๋ ค์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋กœ ๋“ค์–ด๊ฐ€๊ธฐ
  • Step out: ํ˜„์žฌ ๋ฉ”์†Œ๋“œ์—์„œ ๋ฒ—์–ด๋‚˜๊ธฐ

LLDB ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

Print: p

ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ์— ์žˆ๋Š” ๊ฒƒ์„ ์ถœ๋ ฅํ•œ๋‹ค.

image

Print Object: po

๊ฐ์ฒด๋‚˜ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ๋ช…๋ น์–ด

  • description์„ ์ด์šฉํ•ด ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • customStringConvertible์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์œผ๋ฉด ํ•ด๋‹น ๋‚ด์šฉ ํ˜ธ์ถœ
    • ์•„๋‹ˆ๋ผ๋ฉด p์™€ ๋˜‘๊ฐ™์€ ๋™์ž‘์„ ํ•จ

image

Expression: expr

๋‚ด๋ถ€์—์„œ ํ‘œํ˜„์‹์„ ์ž‘์„ฑ ๊ฐ€๋Šฅ

image

  • ์–ธ์ œ ์“ฐ๋Š”๊ฒŒ ์ข‹์„๊นŒ
    • ์˜คํ† ๋ ˆ์ด์•„์›ƒ ํ™•์ธํ•  ๋•Œ ์ข‹๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.