LLDB ๋ ์ฑ ๋ฐํ์ ์ค์ ๋๋ฒ๊น ํ ์ ์๋ ํด์ด๋ค.
"po"
๊ธฐ๋ณธ์ ์ผ๋ก LLDB ์์ po ~~ ๋ช ๋ น์ด๋ฅผ ์์ฑํ๋ฉด ํด๋น ํ์ ๊ณผ ํ๋กํผํฐ์ ๋ํด ๋ณด์ฌ์ค๋ค.
CustomDebugStringConvertible ํ๋กํ ์ฝ์ ์ฑํํ๊ณ , debugDescription ์ ์ถ๊ฐํ๋ฉด Object ์ด๋ฆ์ด ๋ํ๋๋ ๊ณณ์ ์ปค์คํ ํ๊ฒ ์ค๋ช ์ ์ถ๊ฐํ ์ ์๋ค.
- Sub structure ์ ๋ํ ์ปค์คํ ์ด ํ์ํ๋ค๋ฉด CustomReflectable ์ ์ฐพ์๋ณด์.
po ๋ช ๋ น์ด๋ ๊ฐ์ฒด๋ฅผ ํ๋ฆฐํ ํ๋ ๊ฒ ์ธ์๋, ๋ฉ์๋ ํธ์ถ ๋ฑ์ ๋์์ ํ ์ ์๋ค.
po ๋ ์ฌ์ค ํน์ ๋ช ๋ น์ด๋ฅผ alias ๋ก ๋จ์ถ์ํจ ๊ฒ์ด๋ค. ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋์ผํ๊ฒ ๋ง๋ค ์๋ ์๋ค.
- expression --object-description ์ ์ค์ธ๊ฒ
"po" Under the Hood
(lldb) po view ๊ฐ ์คํ๋๋ ๊ณผ์ ์ ๋ด ์๋ค
- LLDB ๋ ์ค์ค๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ํ์ฑํ๊ฑฐ๋ ์ฝ๋๋ฅผ ์คํ์ํค์ง ์๋๋ค.
- po ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด ์ปดํ์ผ์ด ๊ฐ๋ฅํ ์์ค์ฝ๋๋ฅผ ์์ฑํ๋ค.
- ์ปดํ์ผ๋ฌ๊ฐ ์์ค์ฝ๋๋ฅผ ์ปดํ์ผํ ๋ค์, ์คํํ๋ค.
- ์คํ์ด ์๋ฃ๋ ํ LLDB ๋ ๊ฒฐ๊ณผ ๊ฐ์ ์ก์ธ์คํ๊ณ , description ์ ๊ฐ์ ธ์ ์์ค ์ฝ๋๋ก ๋ํํ๋ค.
- ์์ ์์ค ์ฝ๋๋ ๋๋ฒ๊ทธ ํ๋ก์ธ์ค์ ์ํด ์ปดํ์ผ ํ ์คํ๋๋ค.
- ์์ ์คํ ๊ฒฐ๊ณผ๋ LLDB ๊ฐ po ๋ช
๋ น์ ๊ฒฐ๊ณผ๋ก ํ์ํ ๋ฌธ์์ด์ด๋ค.
po ๋ LLDB ์์ ๋ณ์๋ฅผ ํ๋ฆฐํ ํ๋ ์ธ๊ฐ์ง ์ค ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ ๋ฟ์ด๋ค.
"p"
p ๋ช ๋ น์ ๊ฐ์ฒด์ ๋ํ ์ค๋ช ์ด ์์ด ์ถ๋ ฅํ๋ ๋ช ๋ น์ด์ด๋ค.
- po ์ ๋น๊ตํ์ ๋, ๊ฐ์ฒด์ ๋ํ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ์ ์ ๊ฐ์ง๋ง
- ๊ฐ์ฒด ํ์ ๋ช ๋์ $R0 ์ผ๋ก ๋ํ๋๋ ์ ์ด ๋ค๋ฅด๋ค.
p cruise ์ ๊ฒฐ๊ณผ์ธ $R0 ์ ๋ํด์ ๋ ๋ช ๋ น์ ์คํํ๋ฉด, ๋ค์ ๊ฒฐ๊ณผ๋ $R1, $R2 ๋ก ๋ํ๋๋ค.
- ๋ ์ง์คํฐ์ ์ ์ฅ๋๋ ๊ฐ์ด ์๋๊น ๐ค
p ์ฐ์ฐ์ expression ์ ๋ํ alias ๋ก, po ๋ช ๋ น์์ ์ต์ ์ด ์๋ ๋ฒ์ ์ด๋ค.
- po == expression --object-description
"p" Under the Hood
(lldb) p cruise ๋ฅผ ์คํํ์ ๋, ์์ค ์ฝ๋๋ฅผ ์คํํ๊ณ , ์ปดํ์ผ ~ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ถ๋ถ๊น์ง๋ po ์ ๋์ผํ๋ค.
๊ฒฐ๊ณผ๋ฅผ ์ป์ ํ์ Dynamic type resolution ๋จ๊ณ์์ ๋์ ํ์ ์ผ๋ก์ ์บ์คํ ์ ํ๋ค.
์๋ ์์ ์ฒ๋ผ ์ปดํ์ผ์ ์ ์ ํ์ ๊ณผ ๋ฐํ์์ ๋์ ํ์ ์ด ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ,
- ์ ์ ํ์ ์ธ Activity ๋ก ์ธ์ํ๋ฉด ํ๋กํผํฐ์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅ
- ๋์ ํ์
์ธ Trip ์ผ๋ก ์ปจ๋ฒํ
ํ ์ดํ์ ํ๋กํผํฐ์ ์ ๊ทผ์ด ๊ฐ๋ฅ
p cruise.name ์ฒ๋ผ ๋ฐ๋ก ๋์ ํ์ ์ ํ๋กํผํฐ์ ๋ํด ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋๋ค.
- ์ปดํ์ผ์ด ๋ ์ดํ์ ๋์ ํ์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ๋ช ๋ น์ด ์คํ ์์ ์๋ ์ ์ ํ์ ๋ง ์๊ณ ์๋ค.
- ์ด๋ถ๋ถ์ ์์ค์ฝ๋์์๋ ๋์ผํ๋ค. ๋ฐ๋ก ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ๋ช ์์ ์ผ๋ก ์บ์คํ ์ ์์ฑํด๋ผ.
์ดํ LLDB ๋ ๊ฒฐ๊ณผ๋ฅผ Formatter ์๊ฒ ์ ๋ฌํด์, ์ฌ๋์ด ์ฝ๊ธฐ ์ข์ ํํ๋ก ๋ณํํ๋ค.
Formatter ๋ฅผ ํตํ์ง ์๊ณ raw ๋ฐ์ดํฐ๋ฅผ ๋ณธ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
"v"
v ๋ช
๋ น์ ์ถ๋ ฅ์ p ์ ๋์ผํ Formatter ๋ฅผ ๊ฑฐ์น๊ธฐ์ ๋์ผํ๋ค.
์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ ์คํํ๋ ๊ณผ์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋น ๋ฅด๋ค.
"v" Under the Hood
v ๋ช
๋ น์ program state ๋ฅผ ์ฐธ์กฐํด์, ๋ฉ๋ชจ๋ฆฌ์์ ๋ณ์๋ฅผ ์ฐพ๋๋ค.
๋ฉ๋ชจ๋ฆฌ์์ ๋ณ์ ๊ฐ์ ์ฝ๊ณ , ๋์ ํ์
๋ณํ์ ํ๋ค.
๋ง์ฝ ํ๋กํผํฐ์ ๋ํ ์ ๊ทผ์ด ํ์ํ๋ค๋ฉด, ๋ค์ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ๊ณ ๋์ ํ์
๋ณํ์ ๋ฐ๋ณตํ๋ค.
์ดํ Formatter ์๊ฒ ์ ๋ฌํด ๊ฒฐ๊ณผ๋ฅผ ๋ณํํ๋ค.
p ๋ช ๋ น๊ณผ ๋ค๋ฅด๊ฒ v ๋ช ๋ น์ ๋์ ํ์ ์ ํ๋กํผํฐ์ ๋ํด ๋ฐ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
Displaying Variables
Customizing Data Formatter
LLDB ์ Data Formatter ๋ ํ์ฅ ๊ฐ๋ฅํ๋ค. ๐ฎ
Trip ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํ ๋, filter ๋ฅผ ์ถ๊ฐํด์ name ๋ง ์ถ๋ ฅํ๋๋ก ํ ์ ์๋ค.
๊ฐ์ฒด์ summary ๋ฅผ ์ถ๊ฐํ ์ ์๋ค. ๋ณ์๋ ${var} ๋ก ๋ฌถ์ด์ค๋ค.
- Formatter ๋ ๋ฐฐ์ด์ ๊ฐ์๋ฅผ ์ ์ ์๊ธฐ ๋๋ฌธ์, ์๋์ ๋์์ destinations[0] ์ฒ๋ผ ์ง์ ํ๋์ฝ๋ฉ ํด์ผํ๋ค๋ ๋จ์ ์ด ์๋ค.
Python Formatter
Python Formatter ๋ฅผ ํตํด ์ฐ์ฐ์ ํ ์ ์๊ณ , LLDB Scripting Bridge API ์์ ์ ๊ณตํ๋ ๊ฐ์ฒด๋ฅผ ํตํด ํ์ฌ ๋๋ฒ๊น ์ค์ธ ์ธ์ ์ ์ ๊ทผํ ์ ์๋ค.
(lldb) script ๋ฅผ ํตํด python 3 ๋ฅผ ์คํ์ํฌ ์ ์๊ณ , ์ธํฐํ๋ฆฌํฐ๊ฐ ์ ๊ณต๋๋ค. ๋ฐ์ดํฐ๊ฐ ๋ณด์ฌ์ง๋ ํ์์ ๊ธฐ์กด Data formatter ์ ๋์ผํ๋ค.
์์ ์์ ์์ LLDB API ์์ ์ ๊ณต๋๋ ๋ฉ์๋๋ฅผ ํตํด ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ ธ์ค๋๋ก ๋ณ๊ฒฝํด์, ์ธ๋ฑ์ค ํ๋ ์ฝ๋ฉ์ ์ด๊ฒจ๋ผ ์ ์๋ค! ๐ฅน
.py ํ์ผ์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ํฌํธํด์, type summary ๋ก ์ง์ ํด ์ฌ์ฉํ ์ ์๋ค.
๊ฐ์ฒด์ ๋ํ ํ๋กํผํฐ๋ SB value ๋ฅผ ๊ฐ๊ณ , ๊ฐ๊ฐ์ ๋ํ summary ๋ฅผ ๊ฐ๋๋ค.
- summary ๋ฅผ ์ง์ ํ๋ ๊ฑด ๋น์ทํ์ง๋ง, ํน์ ๋ฉ์๋๋ฅผ ๊ฐ๋ ํด๋์ค๋ฅผ ์ ์ํด์ผ ํ๋ค.
- child ์ ๋ํ ์ค๋ช ์ ์ปค์คํ ํ ๋์๋ type synthetic ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค.
~/.lldbinit ํ์ผ์ ๋ช ๋ น์ด๋ฅผ ์ ์ฅํด๋๋ฉด, ๋๋ฒ๊ทธ ์ธ์ ์ด ์์๋ ๋ ์๋์ผ๋ก ๋ก๋๋๋ค.
Summary
- v, p, po ๋ฅผ ํตํด ๋ณ์๋ฅผ ์ถ๋ ฅํ์ ๐โ๏ธ
- filter, summary, synthetic children ์ ํตํด ๋ฐ์ดํฐ ํฌ๋งท์ ์ปค์คํฐ๋ง์ด์งํ์ ๐
- ์คํฌ๋ฆฝํธ์ Python 3 ๋ฅผ ์ฌ์ฉํ์.... ๐
'๐ iOS > WWDC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[WWDC18] iOS Memory Deep Dive (2) | 2022.11.27 |
---|---|
[WWDC19] Advances in Collection View Layout - Part 1 (0) | 2022.10.17 |
[WWDC19] Data Flow Through SwiftUI - Part 2 (0) | 2022.08.30 |
[WWDC19] Data Flow Through SwiftUI - Part 1 (0) | 2022.08.30 |
[iOS] SnapKit / Then ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด ์ฝ๋๋ก UI ๊ตฌํํ๊ธฐ (0) | 2021.11.11 |