GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

facebook

chisel – Chiselは、iOSアプリケーションのデバッグを支援するLLDBコマンドのコレクション

投稿日:

Chiselは、iOSアプリケーションのデバッグを支援するLLDBコマンドのコレクションです。

チゼル

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 キーウィンドウの再帰ビューコントローラの説明を表示します。 はい いいえ
視覚化する UIImageCGImageRefUIViewCALayerNSData (画像の)、 UIColorCIColorCGColorRefを開きます。 はい いいえ
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直接貢献であろうと、コマンドを開発することは同じワークフローに従います。 カスタムコマンド」セクションの説明に従ってコマンドを作成し、

  1. LLDB開始する
  2. ブレークポイントに到達する(または、 Xcodeのデバッグバーで一時停止ボタンを押すか、直接接続さprocess interrupt場合はprocess interruptする)
  3. LLDBのcommand source ~/.lldbinit実行して、 command source ~/.lldbinit実行します
  4. 作業しているコマンドを実行する
  5. コマンドを変更する
  6. オプションで、 script reload(modulename)実行しscript reload(modulename)
  7. コマンドが幸福の源になるまでステップ3〜6を繰り返す

貢献する

あなたが作成した一般的なコマンドを投稿してください。 それがあなたを助けたらそれは他の多くの人々を助けるでしょう! :D寄付方法については、 CONTRIBUTING.mdを参照してください。

ライセンス

ChiselはBSDライセンスを受けています。 LICENSE参照してください。







-facebook

執筆者: