Github: https://github.com/facebook/chisel
チゼル
Chisel
は、iOSアプリケーションのデバッグを支援するLLDB
コマンドのコレクションです。
[ インストール • コマンド • カスタムコマンド • 開発ワークフロー 貢献 • ライセンス ]
LLDBの包括的な概要、およびチゼルの補完方法については、Ari Grantの「 Dancing in the The Debugger」 、「 objc.io」 19号のLLDBを持つWaltzを 参照してください 。
インストール
brew update
brew install chisel
.lldbinit
ファイルが存在しない場合は、それを作成して端末でタップして開くことができます
touch .lldbinit
open .lldbinit
~/.lldbinit
ファイルに次の行を追加します。
# ~/.lldbinit
...
command script import /usr/local/opt/chisel/libexec/fblldb.py
あるいは、チゼルをダウンロードし、 〜/ .lldbinitファイルに次の行を追加します。
# ~/.lldbinit
...
command script import /path/to/fblldb.py
コマンドは、次回Xcode
起動したときに利用可能になります。
コマンド
多くのコマンドがあります。 ここにいくつかあります:( 右のiOS / Macとの互換性)
コマンド | 説明 | iOS | OS X |
---|---|---|---|
pviews | キーウィンドウの再帰的なビューの説明を出力します。 | はい | はい |
pvc | キーウィンドウの再帰ビューコントローラの説明を表示します。 | はい | いいえ |
視覚化する | UIImage 、 CGImageRef 、 UIView 、 CALayer 、 NSData (画像の)、 UIColor 、 CIColor 、 CGColorRef を開きます。 |
はい | いいえ |
F V | クラス名が指定された正規表現と一致する階層内のビューを探します。 | はい | いいえ |
fvc | クラス名が指定された正規表現と一致する階層内のビューコントローラを検索します。 | はい | いいえ |
表示/非表示 | 指定したビューまたはレイヤーを表示または非表示にします。 変更を確認するためにプロセスを続行する必要はありません! | はい | はい |
マスク/マスク解除 | ビューまたはレイヤーを透明な四角形でオーバーレイして、それがどこにあるかを視覚化します。 | はい | いいえ |
国境/非国境 | ビューまたはレイヤーに境界を追加して、ビューまたはレイヤーを視覚化します。 | はい | はい |
カフェ・ラッシュ | レンダリングサーバをフラッシュします(飛行機にアニメーションがない場合は「再ペイント」と同じです)。 | はい | はい |
bmessage | 階層のどのクラスが実際にメソッドを実装しているか心配することなく、クラスのメソッドまたはインスタンスのメソッドにシンボリックなブレークポイントを設定します。 | はい | はい |
ウィバール | オブジェクトのインスタンス変数にウォッチポイントを設定します。 | はい | はい |
プレアンダー | 指定されたオブジェクトからレスポンダチェーンを出力します。 | はい | はい |
… | … などなど! |
すべてのコマンドのリストを表示するには、 LLDB
helpコマンドを実行するか、 Wikiを参照してください。
(lldb) help
The following is a list of built-in, permanent debugger commands:
...
The following is a list of your current user-defined commands:
...
リストの一番下には、 Chisel
から供給されたすべてのコマンドが含まれます。
他のすべてのLLDB
コマンドと同様に、helpコマンドの引数として名前を渡すことで、特定のコマンドを検査することもできます。
(lldb) help border
Draws a border around <viewOrLayer>. Color and width can be optionally provided.
Arguments:
<viewOrLayer>; Type: UIView*; The view to border.
Options:
--color/-c <color>; Type: string; A color name such as 'red', 'green', 'magenta', etc.
--width/-w <width>; Type: CGFloat; Desired width of border.
Syntax: border [--color=color] [--width=width] <viewOrLayer>
Chisel
によって提供されるすべてのコマンドには、冗長なヘルプが付属しています。 それが疑わしいときは必ず読んでください!
カスタムコマンド
ローカルのカスタムコマンドを追加できます。 ここには工夫した例があります。
#!/usr/bin/python
# Example file with custom commands, located at /magical/commands/example.py
import lldb
import fblldbbase as fb
def lldbcommands():
return [ PrintKeyWindowLevel() ]
class PrintKeyWindowLevel(fb.FBCommand):
def name(self):
return 'pkeywinlevel'
def description(self):
return 'An incredibly contrived command that prints the window level of the key window.'
def run(self, arguments, options):
# It's a good habit to explicitly cast the type of all return
# values and arguments. LLDB can't always find them on its own.
lldb.debugger.HandleCommand('p (CGFloat)[(id)[(id)[UIApplication sharedApplication] keyWindow] windowLevel]')
それから、lldbinitでコマンドをソースするだけです。 Chisel
はこのためのpython関数、 fblldb.pyモジュールのloadCommandsInDirectoryがあります。
# ~/.lldbinit
...
command script import /path/to/fblldb.py
script fblldb.loadCommandsInDirectory('/magical/commands/')
また、コマンドが取る引数やオプションを簡単に指定できるようにするための組み込みサポートもあります。 使用例については、 borderおよびpinvocationコマンドを参照してください。
開発ワークフロー
ローカルでの使用であろうとChisel
直接貢献であろうと、コマンドを開発することは同じワークフローに従います。 「 カスタムコマンド」セクションの説明に従ってコマンドを作成し、
-
LLDB
開始する - ブレークポイントに到達する(または、
Xcode
のデバッグバーで一時停止ボタンを押すか、直接接続さprocess interrupt
場合はprocess interrupt
する) - LLDBの
command source ~/.lldbinit
実行して、command source ~/.lldbinit
実行します - 作業しているコマンドを実行する
- コマンドを変更する
- オプションで、
script reload(modulename)
実行しscript reload(modulename)
- コマンドが幸福の源になるまでステップ3〜6を繰り返す
貢献する
あなたが作成した一般的なコマンドを投稿してください。 それがあなたを助けたらそれは他の多くの人々を助けるでしょう! :D寄付方法については、 CONTRIBUTING.md
を参照してください。
ライセンス
Chisel
はBSDライセンスを受けています。 LICENSE
参照してください。