GCC? LLVM? LLDB?
LLVM(Low Level Virtual Machine)
- Xcode4からGCCを置き換えてデフォルトとして採用された
- コンパイルが速い
- コンパイルされたコードが速い
- エラーメッセージがわかりやすい
- 他のツールと連携しやすい
LLDB
- 次世代の高性能デバッガ
- Clang expressionパーサとかLLVM Disassemblerのような、より大きなLLVMプロジェクトにおいて再利用しやすいコンポーネントとしてビルドされる。
- もっと詳しい情報, チュートリアルはこちらへ
LLDBコマンド
<noun> <verb> [-options [option-value]] [argument [argument...]]
- 引数 (argument) が'-'から始まる場合、LLDBにオプションの終了位置を'--'で教えてやる必要がある
(lldb) process launch --stop-at-entry -- -program_arg value
Swift Debugging Reliability
- Failed to get module from AST(abstract syntax tree) context
- Swift Type Resolution
Advanced Debugging Tips and Tricks
普段どのようにやっているか?
- 値の状態によって試してみたい
- 新しいコードを追加してみたい
- コード処理をスキップしてみたい
- Obj-Cコードの値を変更してみたい
expression
- デバッグ中に値の状態を切り替えることができる
- LLDB expressions can modify program state
-
(lldb) expression didSelectedHeight = false
inject code
- デバッグ中に新しいコードを追加してみたい
- Use auto-continuing breakpoints with debugger commands to inject code live
expression dynamicAnimator.delegate = self
symbolic breakpoint & po
- 特定のコードではなく指定されたメソットにブレークポイントを入れて使う
- Create dependent breakpoints using
breakpoint set --one-shot true
breakpoint set — one-shot true — name “-[UILabel setText:]”
-
po $arg1 ($arg2, etc)
in assembly frames to print function arguments
breakpoint types
- (place)breakpoint
- exception breakpoint
- conditional breakpoint
- symbolic breakpoint
thread jump
thread jump
custom debug string
- extension : CustomDebugStringConvertible
Watchpoint
UIKitのようなObj-Cコードをいじる (1)
- Evaluate Obj-C code in Swift frames with
expression -l objc -O -- <expr>
expression -l objc -O -- [`self.view` recursiveDescription]
UIKitのようなObj-Cコードをいじる (2)
UIKitのようなObj-Cコードをいじる (3)
- Flush view changes to the screen using
expression CATransaction.flush()
LLDBコマンドをカスタムしてもっと強力に使う
-
~/.lldbinit
- デバッグの起動時に読み込んでくれる。このファイル中は(Pythonではなく)LLDBのコマンドだけが実行できる。
- その中でPythonスクリプトを読み込むことができる。
-
command alias
command alias poc expression -l objc -O --
-
command script import
command script import ~/nudge.py
LLDB Command Map - download
Reference
"Debugging Swift code with LLDB"
https://medium.com/flawless-app-stories/debugging-swift-code-with-lldb-b30c5cf2fd49
"More than po: Debugging in LLDB"
https://www.slideshare.net/micheletitolo/more-than-po-debugging-in-lldb-78570000
"Video : Advanced Debugging with Xcode and LLDB / WWDC18 "
https://developer.apple.com/videos/play/wwdc2018/412/