インスタンスのアドレスからデバッグ用変数を作るLLDBコマンド vinfo
を実装した。
Memory Graph
や View Hierarchy
からインスタンスのアドレスをコピーして使用することができる。
~/.lldbinit
ファイルに以下のように記載して保存する。
command script import ~/<任意のPATH>/vinfo.py
(lldb) vinfo 0x7f99a3823c00
For Swift // アクセス可能な言語コンテキストを表示
type lookup Sample.ViewController // 型情報
$R170 // コンソールで使用できる変数
(lldb) po $R170.view
▿ Optional<UIView>
- some : <UIView: 0x7f99a3506d30; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x60000240aec0>>
(lldb) vinfo ((id)0x7fdf73d1c050)
のような形で入力しても動作する。
この形式は以下のような操作で自動的に入力される。
View Hierarchy
もしくはMemory Graph
のDebugNavigatorからコンポーネントをコンソールにドラッグするView Hierarchy
もしくはMemory Graph
のDebugNavigatorからコンポーネントにフォーカスをあてた状態で⌘ + Cを入力後コンソールにペーストするViewHierarchy
のビジュアル画面でコンポーネントを選んだ状態で⌘ + Cを入力後コンソールにペーストするMemory Graph
のNodeを選んだ状態で⌘ + Cを入力後コンソールにペーストする
vinfo -c 0x7fdf73d1c050
のように-c
オプションをつけることで
強制的にObjCのインスタンスにすることができる。(用途は不明)
type lookup HOGE
はメンバ一覧を表示するLLDBコマンド
type lookup NSObject
と
type lookup NSObject
では出力結果が違うので注意 (末尾の半角スペースの有無の違い)
以下のようにすることでブレーク時のフレームの言語設定に左右されずに各言語のコードが使用できる。
- Swiftのコードを実行する場合は
po
の代わりにpos
を使用 - ObjC のコードを実行する場合は
po
の代わりにpoc
を使用
- (例)
pos hogeExpression -op -L
poc hogeExpression -op -F
-op
は正規表現上の目印
オプションの一覧はhelp expression
で確認できる。
XCode10.0
以上