iOS LLDBでViewを操作するTips
English version below
はじめに
今回はデバッグ中にLLDBでViewを操作するために役立つTipsを紹介します。
準備
デバッグを開始して、[Debug View Hierarchy]を開いておきます。
今回はUILabelの情報を変更します。
Viewのメモリを調べる
[Debug View Hierarchy] を開いて、調べたいViewを右クリックして[Print Description of UILabel]を選択すると、次のような情報が表示されます。
Printing description of $12: <UILabel: 0x7fb65a6075a0; frame = (0 0; 250 20.3333); text = 'あいうえお'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x6000000975c0>>
上記で表示された中で0x7fb65a6075a0 をコピーしておきます。
メモリからViewの情報を表示する
LLDBから先ほどコピーしておいたメモリを指定して、UILabelの情報を表示させます。
po ((UILabel *) 0x7fb65a6075a0)
結果
<UILabel: 0x7fb65a6075a0; frame = (0 0; 250 20.3333); text = 'あいうえお'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x6000000975c0>>
先ほどの[Print Description of UILabel]と同じ内容が表示されました。
UILabelのtext(文字)を変更する
UILabelの文字を変更する場合は次のようにやります。
e [[(UILabel *) 0x7fb65a6075a0) setText:@"newText"]
eはexpressionのaliasです。eとしても問題ありません。
UIの変更を即座に反映する
上記の方法では、$0 = "newText"のように出ます。
しかしSimulatorや実機ではまだ反映されていません。
Continueすることで反映させることもできます。
しかしDebugのために即座に反映させましょう。
e (void)[CATransaction flush]
DebugからContinueすることなく、反映されたと思います。
おわりに
LLDBかなり強力なDebugツールです。
もっと使いこなしていきたいですね。