Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Xcodeの Memory graph を使った華麗なるデバッグ

Xcodeの Memory graph を使った華麗なるデバッグ

MiyasakaKazutoshi

March 19, 2019
Tweet

More Decks by MiyasakaKazutoshi

Other Decks in Programming

Transcript

  1. Xcodeの
    Memory graph
    を使った華麗なるデバッグ
    @po_miyasaka
    try! Swift Pre Talks 2019

    View Slide

  2. ⾃自⼰己紹介
    @po_miyasaka
    「ペンギン村」に住む

    / 登⼭山 / LLDB /

    View Slide

  3. Debug Navigator
    Memory Graph

    View Slide

  4. 現時点で⽣生成されている
    クラスインスタンスが
    すべて表示されている

    View Slide

  5. もしこの画⾯面から
    任意のプロパティやメソッドに
    簡単にアクセスできたら便便利利

    View Slide

  6. ⭕ ブレークポイントを無理理に
      作る必要はなくなる

    View Slide

  7. ⭕ ブレークポイントを無理理に
      作る必要はなくなる
    ⭕ Memory Graphは
      いつでも表示できるので
      使いやすい

    View Slide

  8. ということで

    View Slide

  9. これを実現するLLDBコマンド
    「vinfo」を作りました。
    (設定&インポート⽅方法はリポジトリのREAD.mdに記載)
    https://github.com/po-miyasaka/LLDB

    View Slide

  10. アドレスを渡すと
    vinfoの使い⽅方

    View Slide

  11. 変数が⽣生成される。
    vinfoの使い⽅方

    View Slide

  12. メンバにもアクセスできる
    vinfoの使い⽅方

    View Slide

  13. (デモが失敗した時に⾒見見る記事、Gifイメージあり)
    http://blog.penginmura.tech/entry/2019/02/03/215957
    • プライベートなプロパティを確認

    • プライベートなメソッドの実⾏行行

    • View Hierarchyでの応⽤用
    デモ

    View Slide

  14. ⽣生成された変数がSwift、ObjC
    どちらの⾔言語で扱うべきかを示す。
    vinfoの出⼒力力について

    View Slide

  15. 「po」の代わりに以下のコマンドで⾔言語を使い分ける
    Swiftの場合「pos」
    Objcの場合「poc」
    (これらはvinfoのコード内に定義されたエイリアスです。)
    vinfoの出⼒力力について

    View Slide

  16. 「type lookup」
    はメンバ⼀一覧を表示するLLDBコマンド。
    vinfoの出⼒力力について

    View Slide

  17. vinfoの出⼒力力について
    「type lookup」
    はメンバ⼀一覧を表示するLLDBコマンド。
    実⾏行行結果

    View Slide

  18. 準拠しているプロトコルや
    エクステンションに派⽣生したメソッドなど
    も表示できる
    vinfoの出⼒力力について
    実⾏行行結果

    View Slide

  19. vinfoコマンドの特⻑⾧長
    • アドレスからSwift, Objcクラスの変数を作成できる。

    • 外部ライブラリのクラスに対しても使⽤用可能

    • 「Debug View Hierarchy」でも使⽤用可能

    • プライベートなメンバにもアクセスできる

    • type lookup でメンバを確認できる

    • セットアップが簡単

    • コードに影響を与えることなく活⽤用できる

    View Slide

  20. • アドレスからSwift, Objcクラスの変数を作成できる。

    • 外部ライブラリのクラスに対しても使⽤用可能

    • 「Debug View Hierarchy」でも使⽤用可能

    • プライベートなメンバにもアクセスできる

    • type lookup でメンバを確認できる

    • セットアップが簡単

    • コードに影響を与えることなく活⽤用できる
    vinfoコマンドの特⻑⾧長

    View Slide

  21. ご清聴ありがとうございました!

    View Slide