Slide 1

Slide 1 text

LLDB + chisel = ∞ 2014/04/26 yidev౦ژୈೋճ @dealforest Toshihro Morimoto

Slide 2

Slide 2 text

ࣗݾ঺հ http://about.me/dealforest ! ! iOS App / Web Application(perl, ruby) @dealforest Toshihro Morimoto

Slide 3

Slide 3 text

Έͳ͞Μ LLDB ͔ͭͬͯ·͔͢ʁ

Slide 4

Slide 4 text

ͱ͋Δੲ…

Slide 5

Slide 5 text

LLDB ͕σϑΥϧτͷ Debugger ͱͳΓ·͕ͨ͠ OS X 10.8.4 Ͱ Xcode ͔ΒΞϓϦέʔγϣϯΛ iOS Simulator Ͱ࣮ߦͨ͠ͱ͖ʹ SIGABRT Ͱ ΞϓϦ͕ىಈͤͣʹ crash ͢Δ (※Xcode 4.6.3 Ͱमਖ਼͞Ε·ͨ͠)

Slide 6

Slide 6 text

ղܾࡦ σόοΨΛ LLDB ͔Β GDB ʹมߋ͢Δ

Slide 7

Slide 7 text

ͱ͍͏͜ͱ͕Γ·͕ͨ͠ Xcode 5.1.1 ͷࡢࠓ Έͳ͞Μ LLDB ࢖ͬͯ·͢ΑͶʁ

Slide 8

Slide 8 text

ͳͥ LLDB(σόοΨ) ʹ ݻࣥ͢Δͷ͔ʁ

Slide 9

Slide 9 text

ϓϩδΣΫτʹґଘͤͣ͠ʹ σόοά͍ͨ͠

Slide 10

Slide 10 text

؆୯ͳ͓͞Β͍

Slide 11

Slide 11 text

iOS Advent Calendar 2013 6೔໨

Slide 12

Slide 12 text

͓͞Β͍ͷ಺༰ • object ͷදࣔ/มߋ/ఆٛ/ • Python ͷ࣮ߦ • Inspector ͷΧελϚΠζ • ΧελϜίϚϯυͷ࡞੒ • ઃఆϑΝΠϧ

Slide 13

Slide 13 text

object Λදࣔ (llbd) po [“obejct” or “address”] (lldb) p [“primitive value” or “address”]

Slide 14

Slide 14 text

object ͷ஋Λมߋ (lldb) po self.title = @“hoge”

Slide 15

Slide 15 text

object Λఆٛ (lldb) po NSString *$hoge = @“hoge” (lldb) po $hoge

Slide 16

Slide 16 text

Python ͷ࣮ߦ (lldb) script print 'hoge'

Slide 17

Slide 17 text

Python ͷ࣮ߦ (lldb) script import os (lldb) script print os.getcwd()

Slide 18

Slide 18 text

ΧελϜίϚϯυͷ࡞੒ ΊΜͲ͍͘͞ͷͰ Qiita Λݟ͍ͯͩ͘͞

Slide 19

Slide 19 text

Inspector ͷΧελϚΠζ http://stavash.wordpress.com/2013/01/06/advanced-issues-creating-custom-lldb- object-summaries/

Slide 20

Slide 20 text

Inspector ͷΧελϚΠζ

Slide 21

Slide 21 text

Inspector ͷΧελϚΠζ

Slide 22

Slide 22 text

ઃఆϑΝΠϧ 1. ~/.lldbinit-Xcode • Xcode ͔Βىಈͨ͠ࡍͷઃఆΛهೖ 2. ~/.lldbinit • shell ͔Βىಈͨ͠ࡍͷઃఆΛهೖ

Slide 23

Slide 23 text

ઃఆϑΝΠϧ ~/.lldbinit-Xcode ͕͋Δ৔߹͸ ~/.lldbinit ͕ಡΈࠐ·Εͳ͍ͷͰཁ஫ҙ

Slide 24

Slide 24 text

ઃఆϑΝΠϧ ~/.lldbinit-Xcode ʹ command source ~/.lldbinit Λهೖ͓ͯ͘͜͠ͱͰճආՄೳ

Slide 25

Slide 25 text

ઃఆϑΝΠϧʹ alias Λॻ͘͜ͱ͕Ͱ͖·͢

Slide 26

Slide 26 text

ศརͳ alias Λ঺հ

Slide 27

Slide 27 text

stacktrace Λදࣔ (lldb) st ! command regex st 's/^[[:space:]]*$/po [NSThread callStackSymbols]/'

Slide 28

Slide 28 text

؀ڥม਺Λදࣔ (lldb) pe ! command regex pe 's/^[[:space:]]*$/po [[NSProcessInfo processInfo] environment]/'

Slide 29

Slide 29 text

NSDate Λ NSString ʹม׵ͯ͠දࣔ (lldb) pd [NSDate] ! command regex pd 's/^(.+)$/po [[NSString alloc] initWithData: %1 encoding:4]/'

Slide 30

Slide 30 text

CALayer ͷ Animation ଎౓ͷมߋ (lldb) pa 0.4 # slow (lldb) pa 1 # normal ! command regex pa 's/^(.+)$/p [(CALayer *)[[[[UIApplication sharedApplication] windows] objectAtIndex: 0] layer] setSpeed:%1]/'

Slide 31

Slide 31 text

؆୯ͳ͓͞Β͍͓ΘΓ

Slide 32

Slide 32 text

ຊ୊

Slide 33

Slide 33 text

Xcode 5.1 ͔Β break தʹ QuickLook Ͱදࣔ͞ΕΔΑ͏ʹͳΓ·ͨ͠

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

͋͘·Ͱίʔυ্ʹ ର৅ͷ Object ͕ͳ͍ͱ ͍͚ͳ͔ͬͨΓԿ͔ͱෆศͰ͢

Slide 36

Slide 36 text

΋ͬͱࣗ༝ʹௐ΂͍ͨ

Slide 37

Slide 37 text

ίϚϯυΛ؅ཧ͢ΔͷΊΜͲ͍͘͞

Slide 38

Slide 38 text

alias Λ؅ཧ͢ΔͷΊΜͲ͍͘͞

Slide 39

Slide 39 text

ϝϯςφϯε͢Δͷ΋ΊΜͲ͍͘͞

Slide 40

Slide 40 text

ͦΜͳଵଦͳΈͳ͞·ͷ ͨΊʹศརͳ΋ͷ͕͋Γ·͢

Slide 41

Slide 41 text

facebook/chisel https://github.com/facebook/chisel

Slide 42

Slide 42 text

Install $ brew install chisel or $ git clone https://github.com/ facebook/chisel.git

Slide 43

Slide 43 text

Install $ echo “command script import / path/to/fblldb.py” >> ~/.lldbinit

Slide 44

Slide 44 text

chisel - version 1.1.0 • Python Ͱॻ͔Ε͍ͯ·͢ • LLDB ༻ͷ Debug ʹ໾ཱͭίϚϯυू • ࣮ػͰ΋࢖͑Δ • ֤ʑͷ։ൃ؀ڥͰઃఆͯ͠Ε͹͍͍

Slide 45

Slide 45 text

தͰ΋ศརͳίϚϯυΛ঺հ͠·͢

Slide 46

Slide 46 text

border/unborder ࿮ઢΛදࣔ/ඇදࣔ

Slide 47

Slide 47 text

pclass ਌ࢠؔ܎(inherits from)Λදࣔ

Slide 48

Slide 48 text

pvc/pviews/ptv/pcells recursiveDiscription ͷ݁ՌΛ filtering

Slide 49

Slide 49 text

presponder Responder Chain Λදࣔ

Slide 50

Slide 50 text

bmessage ࢦఆͨ͠ selector ʹ breakpoint Λઃఆ

Slide 51

Slide 51 text

visualize ը૾ͱͯ͠ग़ྗ

Slide 52

Slide 52 text

taplog tap ͨ͠ object ͷ description Λදࣔ

Slide 53

Slide 53 text

DEMO

Slide 54

Slide 54 text

·ͱΊ chisel Λ࢖͏ͱϓϩδΣΫτʹ ࠨӈ͞Εͳ͍σόοΫ؀ڥ͕ खʹ͸͍Γ·͢

Slide 55

Slide 55 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠