Search

[WWDC] Discover breakpoint improvements

๐ŸŽ

๋“ค์–ด๊ฐ€๋ฉฐ

๋””๋ฒ„๊น…์„ ๋ณด๋‹ค ์ƒ์‚ฐ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” breakpoint improvement๋ฅผ ์•Œ์•„๋ณด์ž!
breakpoint
๐Ÿง”๐Ÿปโ€โ™‚๏ธย : ๋งŒ์•ฝ ๋‹น์‹ ์ด ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์˜ˆ์ƒ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ , ๋””๋ฒ„๊ฑฐ๋ฅผ ํ†ตํ•ด์„œ ํ™•์ธํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
1.
ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๋ฅผ ๊ฒ€์‚ฌํ•ด์„œ ์ƒํ™ฉ์„ ์ž์„ธํžˆ ํŒŒ์•…ํ•˜๊ธฐ
2.
ํ”„๋กœ์„ธ์Šค ์‹คํ–‰์„ ํ†ตํ•ด์„œ ๋…ผ๋ฆฌ๋ฅผ ํ™•์ธํ•˜๊ธฐ
๋‘ ์ƒํ™ฉ ๋‹ค ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ง์ „์— ์ผ์‹œ ์ค‘์ง€ํ•ด์•ผ ํ•œ๋‹ค.
breakpoint๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
3๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ breakpoint๋ฅผ ์•Œ์•„๋ณด์ž.

Source file breakpoints

โ€ข
single file
โ€ข
Line breakpoint
โ€ข
๊ฒ€์‚ฌํ•˜๋ ค๋Š” ์ฝ”๋“œ ์ค„์—์„œ ์ผ์‹œ ์ค‘์ง€ํ•˜๋Š” ๋ฐ ์ ํ•ฉ
๊ฐ€์žฅ ๋น ๋ฅธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
์ผ์‹œ ์ค‘์ง€ํ•  ์ค„ ๋ฐ”๋กœ ์˜†์— ์žˆ๋Š” gutter๋ฅผ ํด๋ฆญํ•˜๋Š” ๊ฒƒ
๐Ÿง”๐Ÿปโ€โ™‚๏ธย : ๋‹ค๋ฅธ expressing์œผ๋กœ steppingํ•˜๊ณ  ์žˆ์–ด์š”. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” adjustedDensity๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
๐Ÿง”๐Ÿปโ€โ™‚๏ธย : step out์œผ๋กœ ์ž ์‹œ ๋‚˜๊ฐ”๋‹ค๊ฐ€ ๋‹ค์‹œ ๊ธฐ๋Šฅ์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋Ÿฐ ๊ฑธ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•œ๋‹ค๋ฉด ํž˜๋“ค๊ฑฐ์˜ˆ์š”.
line breakpoint๊ฐ€ ์ถฉ๋ถ„ํžˆ ์„ธ๋ถ„ํ™”๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒ
why?
LLDB๊ฐ€ ์ •์ง€ํ•  ์œ„์น˜๋ฅผ ํ•˜๋‚˜ ์ด์ƒ ์ƒ์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๐Ÿง”๐Ÿปโ€โ™‚๏ธย : ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฑด convertedToVolume์ด ์‹คํ–‰๋˜๊ธฐ ์ง์ „์— ์ผ์‹œ ์ค‘์ง€ํ•˜๋Š” ๊ฒƒ
Xcode 13์—์„œ๋Š” Column breakpoint๋ฅผ ๋„์ž…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŠน์ • expression์—์„œ ์ผ์‹œ ์ค‘์ง€ํ•ด์•ผ ํ•  ๋•Œ ์ƒ๊ธฐ๋Š” line breakpoint์˜ ๋‹จ์ ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.
expression๋ฅผ ํด๋ฆญํ•ด์„œ pop over๋ฅผ ์—ฐ ๋‹ค์Œ์— Set Column Breakpoint๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋น„ํ™œ์„ฑํ™”, ํ™œ์„ฑํ™” ๊ฐ€๋Šฅ
โ€ข
breakpoint๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ, ๋‘ ๋ฒˆ ํด๋ฆญ
Control ๋˜๋Š” ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ด์ „ ์ž‘์—…์ด ํฌํ•จ๋œ ์ƒํ™ฉ๋ณ„ ๋ฉ”๋‰ด๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
๐Ÿง”๐Ÿปโ€โ™‚๏ธย : ์ €๋Š” breakpoint navigator๋ฅผ ํ‘œ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
Xcode 11.4์—์„œ๋Š” Column PC๋ฅผ ๋„์ž…ํ•ด์„œ expression ์•„๋ž˜์— ๋…น์ƒ‰ ๋ฐ‘์ค„์„ ๊ทธ๋ ค ์ผ์‹œ ์ค‘์ง€๋œ column๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋””๋ฒ„๊ฑฐ๊ฐ€ ๋‹ค์Œ์— ์‹คํ–‰ํ•  ์‹์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Column breakpoint๋Š” ํŠนํžˆ Swift Closure๋‚˜ Objective-C์˜ Block์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
๐Ÿง”๐Ÿปโ€โ™‚๏ธย : Swift Closure๋Š” ๊ฐ€๋” multiple closure๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
โ€ข
์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋””๋ฒ„๊ทธ ์กฐ๊ฑด์—์„œ ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•  ๋•Œ source line๊ณผ column์„ ์ปดํŒŒ์ผ๋œ ์ฃผ์†Œ๋กœ ๋งคํ•‘ํ•˜๋Š” line table๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
โ€ข
์ด line์— ์žˆ๋Š” ๊ฐ ํด๋กœ์ €์— ๋Œ€ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋””๋ฒ„๊ฑฐ๊ฐ€ ์ผ์‹œ ์ค‘์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  line table ํ•ญ๋ชฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
๋งŒ์•ฝ $0๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด,
breakpoint๋ฅผ line 269๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ์‹œ ์ค‘์ง€ํ•œ ํ›„์— ๋งˆ์ง€๋ง‰ closure์— ๋„๋‹ฌํ•˜๋ ค๋ฉด ์ƒ์„ฑ๋œ line table ํ•ญ๋ชฉ์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜๋งŽ์€ step in๊ณผ step out๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๐Ÿง”๐Ÿปโ€โ™‚๏ธย : Xcode 13์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งˆ์ง€๋ง‰ $0์— column breakpoint๋ฅผ ๊ฐ„๋‹จํžˆ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ผ์‹œ ์ค‘์ง€ํ•˜๋ฉด ์›ํ•˜๋Š” ์œ„์น˜์— ์ •ํ™•ํžˆ ๋„๋‹ฌํ•˜๊ณ  $0๋ฅผ ๋งˆ์Œ๊ป ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๐Ÿ‘

Symbolic breakpoints

โ€ข
breakpoints on function names โ†’ pause the process when functions are executed.
โ€ข
์›๋ณธ ํŒŒ์ผ breakpoint๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๋ถˆํŽธํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉ
โ—ฆ
source file์— accessํ•  ์ˆ˜ ์—†์–ด์„œ ๋””๋ฒ„๊ทธ ์ •๋ณด๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์—†์„ ๋•Œ
โ—ฆ
๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋งŽ์€ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ฐ ํ•˜์œ„ ํด๋ž˜์Šค๋งˆ๋‹ค ํŒŒ์ผ breakpoint๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฑด ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กœ์šด ์ผ๐Ÿ’ฉ
1.
breakpoint navigator ํ•˜๋‹จ์— ์žˆ๋Š” ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
2.
Symbolic breakpoint๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ฆ‰์‹œ breakpoint navigator์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
3.
์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์šฐ๋ฆฌ๊ฐ€ toggle ํ•จ์ˆ˜๋ฅผ ์ผ์‹œ ์ค‘์ง€ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •์„ ํ•˜๊ณ  ๋„ฃ์–ด๋ด…๋‹ˆ๋‹ค.
๐Ÿง”๐Ÿปโ€โ™‚๏ธย : ํ”ํ•œ ๋‹จ์–ด์ธ ํ•จ์ˆ˜ ์ด๋ฆ„์€ ์กฐ์‹ฌํ•  ํ•„์š”๊ฐ€ ์žˆ์–ด์š”.
Why?
LLDB๊ฐ€ ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค์—์„œ ๋กœ๋“œ๋˜๋Š” ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค!
breakpoint์˜ ์œ„์น˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋•Œ๋กœ๋Š” ์ˆ˜์ฒœ ๊ฐœ๊ฐ€ ๋  ์ˆ˜ ์žˆ์–ด์š”.!๐Ÿ’ฉ
๐Ÿง”๐Ÿปโ€โ™‚๏ธย : ๊ณ ๋ง™๊ฒŒ๋„ ํŠน์ • ๋ชจ๋“ˆ๋กœ ๊ฒ€์ƒ‰์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๐Ÿ‘
๋ชจ๋“ˆ์€ main binary๋ฅผ ํฌํ•จํ•˜์—ฌ ์‹คํ–‰ ์ค‘์— ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” binary or image์ž…๋‹ˆ๋‹ค.
์˜ˆ์‹œ์—์„œ๋Š” ์•ฑ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ด๋ฆ„์€ โ€œFrutaโ€๋ฅผ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.
์„ธ ๊ณณ์˜ ์œ„์น˜๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.๐Ÿ‘
[ ๐Ÿ’œย ์ข‹์•„์š” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์ž, toggle ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ชจ์Šต ]
symbolic breakpoint์˜ ๊ฒฝ์šฐ, typographic error๋ฅผ ๋ฒ”ํ•˜๊ธฐ ์ƒ๋‹นํžˆ ์‰ฝ๋‹ค.
์šฐ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ breakpoint์— ๋ถ€๋”ชํžˆ์ง€ ์•Š๊ณ  ๋จธ๋ฆฌ๋ฅผ ๊ธ์ ์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๐Ÿง”๐Ÿปโ€โ™‚๏ธโ‡
convertToMass๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ์„ ๋งŒ๋“ค์–ด๋ด์š”.
Xcode 13์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์œผ๋กœ LLDB์— ์˜ํ•ด breakpoint๊ฐ€ ์–ด๋–ค ์œ„์น˜์—์„œ๋„ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด ์ ์„  ์•„์ด์ฝ˜์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
unresolved breakpoint ์•„์ด์ฝ˜ ์œ„๋กœ ๋งˆ์šฐ์Šค๋ฅผ ๊ฐ€์ ธ๊ฐ€๋ฉด ๋„์›€์ด ๋˜๋Š” ํˆดํŒ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
1.
์ด๋ฆ„์€ ์ •ํ™•ํ•˜๊ฒŒ ์ฒ ์ž๋ฅผ ์จ์•ผ ํ•˜๊ณ  ๊ธฐํ˜ธ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
2.
breakpoint์— ๋Œ€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ๋“œ โ†’ LLDB๊ฐ€ ์ž๋™์œผ๋กœ breakpoint์„ ํ•ด๊ฒฐ
๐Ÿง”๐Ÿปโ€โ™‚๏ธย : ์ด๋ฒˆ์—๋Š” ์ œ๊ฐ€ ์ฒ ์ž๋ฅผ ์ž˜๋ชป ์“ด ๊ฑฐ ๊ฐ™๋„ค์š”.;;
๋„ค๋น„๊ฒŒ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ convert ๋ฅผ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๊ฒ ์ฃ .
but, ๋ถ„์„ํ•˜๋ ค๋ฉด ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ฆฌ๊ฒ ๋„ค์š”;
LLDB๋ฅผ ํ†ตํ•ด์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ์‹œ๋‹ค!
image lookup -rn convert Fruta
module : image, regex : lookup -r, name: n, convert๋ฅผ Fruta์— ์ž…๋ ฅํ•ด์„œ ๊ฒ€์ƒ‰ํ•˜๋Š”๊ฑธ๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฆ„ ์ฒ ์ž๊ฐ€ ํ™•์‹คํžˆ ํ‹€๋ ธ๋„ค์š”.๐Ÿ’ฉ
Unresolved breakpoint๋Š” source file breakpoint์—์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Unresolved๋œ ์ด์œ ๋Š”
1.
breakpoint์— ๋Œ€ํ•œ line๋ฅผ ์ปดํŒŒ์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์˜ˆ์‹œ์—์„œ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ ์กฐ๊ฑด์ด ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์•˜๋‹ค.
2.
์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๋””๋ฒ„๊ทธ ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋นŒ๋“œ ์„ค์ •์„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Runtime issue breakpoints

โ€ข
background thread์—์„œ UI ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋“ฑ์˜ ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ
โ€ข
crash๋งŒํผ ์‹ฌ๊ฐํ•˜์ง€๋Š” ์•Š์œผ๋ฉฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ Xcode๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ผ์‹œ ์ค‘์ง€ํ•˜์ง€ ์•Š์Œ
โ—ฆ
๋‹ค๋ฅธ ๋ฒ„๊ทธ์— ์ดˆ์ ์„ ๋งž์ถœ ๋•Œ ๋„ˆ๋ฌด ํฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ
โ—ฆ
๋Œ€์‹  ๋Ÿฐํƒ€์ž„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Xcode๋Š” backtrace๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ์ด์Šˆ ํƒ์ƒ‰๊ธฐ์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
runtime breakpoint๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋””๋ฒ„๊ฑฐ์—์„œ ์ผ์‹œ ์ค‘์ง€ํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿง”๐Ÿปโ€โ™‚๏ธย : runtime breakpoint์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŒ์—…์„ ์‚ฌ์šฉํ•ด์„œ ํŠน์ • ์œ ํ˜•์„ ์‰ฝ๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์–ด์š”!
๐Ÿง”๐Ÿปโ€โ™‚๏ธย : ์ผ๋ถ€๋Š” ํŽธ์ง‘๊ธฐ์—์„œ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋™ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ฐˆ ์ˆ˜ ์žˆ์–ด์š”!