๋ค์ด๊ฐ๋ฉฐ
๋๋ฒ๊น
์ ๋ณด๋ค ์์ฐ์ ์ผ๋ก ๋ง๋ค ์ ์๋ breakpoint improvement๋ฅผ ์์๋ณด์!
breakpoint
1.
ํ๋ก์ธ์ค ์ํ๋ฅผ ๊ฒ์ฌํด์ ์ํฉ์ ์์ธํ ํ์
ํ๊ธฐ
2.
ํ๋ก์ธ์ค ์คํ์ ํตํด์ ๋
ผ๋ฆฌ๋ฅผ ํ์ธํ๊ธฐ
๋ ์ํฉ ๋ค ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๊ธฐ ์ง์ ์ ์ผ์ ์ค์งํด์ผ ํ๋ค.
breakpoint๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
3๊ฐ์ง ์ผ๋ฐ์ ์ธ breakpoint๋ฅผ ์์๋ณด์.
Source file breakpoints
โข
single file
โข
Line breakpoint
โข
๊ฒ์ฌํ๋ ค๋ ์ฝ๋ ์ค์์ ์ผ์ ์ค์งํ๋ ๋ฐ ์ ํฉ
๊ฐ์ฅ ๋น ๋ฅธ ์ฌ์ฉ ๋ฐฉ๋ฒ
์ผ์ ์ค์งํ ์ค ๋ฐ๋ก ์์ ์๋ gutter๋ฅผ ํด๋ฆญํ๋ ๊ฒ
line breakpoint๊ฐ ์ถฉ๋ถํ ์ธ๋ถํ๋์ง ์์ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์
why?
LLDB๊ฐ ์ ์งํ ์์น๋ฅผ ํ๋ ์ด์ ์์ฑํ๊ธฐ ๋๋ฌธ์ด๋ค.
Xcode 13์์๋ Column breakpoint๋ฅผ ๋์
ํ๊ณ ์์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ํน์ expression์์ ์ผ์ ์ค์งํด์ผ ํ ๋ ์๊ธฐ๋ line breakpoint์ ๋จ์ ์ ๋ฐฉ์งํ๋ค.
expression๋ฅผ ํด๋ฆญํด์ pop over๋ฅผ ์ฐ ๋ค์์ Set Column Breakpoint๋ฅผ ์ ํํฉ๋๋ค.
โข
๋นํ์ฑํ, ํ์ฑํ ๊ฐ๋ฅ
โข
breakpoint๋ฅผ ์์ ํด์ผํ๋ ๊ฒฝ์ฐ, ๋ ๋ฒ ํด๋ฆญ
Control ๋๋ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ด์ ์์
์ด ํฌํจ๋ ์ํฉ๋ณ ๋ฉ๋ด๊ฐ ๋ํ๋ฉ๋๋ค.
Xcode 11.4์์๋ Column PC๋ฅผ ๋์
ํด์ expression ์๋์ ๋
น์ ๋ฐ์ค์ ๊ทธ๋ ค ์ผ์ ์ค์ง๋ column๋ฅผ ํ์ํฉ๋๋ค. ๋ฐ๋ผ์ ๋๋ฒ๊ฑฐ๊ฐ ๋ค์์ ์คํํ ์์ ์ ์ ์์ต๋๋ค.
Column breakpoint๋ ํนํ Swift Closure๋ Objective-C์ Block์ ์ ์ฉํฉ๋๋ค.
โข
์ปดํ์ผ๋ฌ๋ ๋๋ฒ๊ทธ ์กฐ๊ฑด์์ ํ์ผ์ ์ปดํ์ผํ ๋ source line๊ณผ column์ ์ปดํ์ผ๋ ์ฃผ์๋ก ๋งคํํ๋ line table๋ฅผ ๋ง๋ญ๋๋ค.
โข
์ด line์ ์๋ ๊ฐ ํด๋ก์ ์ ๋ํด ์ปดํ์ผ๋ฌ๋ ๋๋ฒ๊ฑฐ๊ฐ ์ผ์ ์ค์งํ๋ ๋ฐ ์ฌ์ฉํ line table ํญ๋ชฉ์ ์์ฑํฉ๋๋ค.
๋ง์ฝ $0๋ฅผ ๊ฒ์ฌํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํ๋ฉด,
breakpoint๋ฅผ line 269๋ก ์ค์ ํ ์ ์์ง๋ง, ์ผ์ ์ค์งํ ํ์ ๋ง์ง๋ง closure์ ๋๋ฌํ๋ ค๋ฉด ์์ฑ๋ line table ํญ๋ชฉ์ผ๋ก ์ธํด์ ์๋ง์ step in๊ณผ step out๋ฅผ ์ํํด์ผ ํฉ๋๋ค.
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๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ฒ๊ฑฐ์์ ์ผ์ ์ค์งํ๊ณ ํ๋ก์ธ์ค๋ฅผ ํ์ํ ์ ์์ต๋๋ค.































