Skip to content
A LLDB command creating a variable from a arbitrary instance address for debug
Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore
LICENSE
README.md
vinfo.py

README.md

概要

インスタンスのアドレスからデバッグ用変数を作る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以上

You can’t perform that action at this time.