インスタンスのアドレスからデバッグ用変数を作る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 -Lpoc hogeExpression -op -F
-opは正規表現上の目印
オプションの一覧はhelp expressionで確認できる。
XCode10.0以上