読者です 読者をやめる 読者になる 読者になる

絶品ゆどうふのタレ

ふと気づいたことを綴るだけのメモ

iOSDC Japan 2016 参加メモ: A-11 Xcodeで快適なデバッグライフを追い求める

Xcode

  • XcodeなくしてiOSの開発はありえない
    • 原因にいかに早くたどり着くか

クラッシュしたらAppDelegateだった問題

Exception Breakpointを追加

  • Breakpoint追加時に Exception Breakpoint を選んで追加

    • ただし、Exception前提で書かれていると意図と違うタイミングでbreakしてしまう
      • storyboardがなければフォールバックする、とか
  • Diagonosticsを設定

    • 不正なメモリ操作を検知
    • dynamic library
    • Edit Schemaから設定できる
      • Enable Zombi Object
      • Enable Address Sanitizor -> パフォーマンスは下がる
    • アセンブラレベルまでクラッシュした場合、これがあれば追える

どのViewControllerかわからない問題

  • 新しいプロジェクトに入ると。。。

  • Symblic Breakpointを追加

    • SymbolにviewWillAppear / viewDidLoadなどを追加
      • commandで bt 0するとでる
    • viewControllerで設定しておかないと、Symbolic Breakpointが効かない
  • Share Breakpointすると、チーム間で共有できる

起動時に特定のViewControllerにしたい問題

  • デバッグ時に深いページ開くの辛い。。。
  • Environment Variables
    • Edit Schemaから設定できる
      • この環境変数を参照して挙動を変える処理をAppDelegateに書いておく
    • メリット
      • Xcode から起動した時のみ有効になる!
      • 一時的な挙動の切替に便利

端末のログやファイルを取得したい問題

  • 実機のログやRealmをみたい

    • できるけどめんどくさい
  • LLDBを使って該当ファイルをSlackに送信

    • breakpointでbreakしてコマンドを打つ
    • gistに公開しました
      • ./llidbinit の中に呼び出しを入れておく

まとめ

  • 快適になると良いね!

QA

  • Closureの中でオブジェクトを参照する方法とかありますか?

    • lldbが巧くフレームを取れてないのが悪そう
    • 2連発で取ると巧く行くことはある。。。けど基本諦めてる
  • Breakpointとlogが多すぎてわからなくなるのはどうしてますか?

    • Loglevelを切り替えられるようにしたりして、フィルタしてる