po-miyasaka / LLDB

A LLDB command creating a variable from a arbitrary instance address for debug

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

概要

インスタンスのアドレスからデバッグ用変数を作るLLDBコマンド vinfoを実装した。
Memory GraphView 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を入力後コンソールにペーストする

強制的にObjCのインスタンスとして扱う

vinfo -c 0x7fdf73d1c050のように-cオプションをつけることで
強制的にObjCのインスタンスにすることができる。(用途は不明)

type lookupについて

type lookup HOGE はメンバ一覧を表示するLLDBコマンド
type lookup NSObject
type lookup NSObject では出力結果が違うので注意 (末尾の半角スペースの有無の違い)

pos pocなどのコマンドエイリアスについて

vinfoをインポートすると pospocのようなコマンドが使えるようになる

以下のようにすることでブレーク時のフレームの言語設定に左右されずに各言語のコードが使用できる。

  • Swiftのコードを実行する場合はpoの代わりにposを使用
  • ObjC のコードを実行する場合はpoの代わりにpocを使用

pospocに任意のコマンドオプションを付与することができる。

  • (例)
    • pos hogeExpression -op -L
    • poc hogeExpression -op -F

-opは正規表現上の目印
オプションの一覧はhelp expressionで確認できる。

動作環境

XCode10.0以上

About

A LLDB command creating a variable from a arbitrary instance address for debug

License:MIT License


Languages

Language:Python 100.0%