なんとかするから、なんとかなる

エンジニア関係のことを書きます

iOS LLDBでViewを操作するTips

English version below

はじめに

今回はデバッグ中にLLDBでViewを操作するために役立つTipsを紹介します。

準備

デバッグを開始して、[Debug View Hierarchy]を開いておきます。 f:id:hopita:20180824213110p:plain

今回は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ツールです。

もっと使いこなしていきたいですね。