概要
LLDBのpo
コマンドのような、コンソールで利用できるカスタムコマンドを作成します。
Hello Worldコマンドを作る
今回はカスタムコマンド作成方法の土台を知るために、
以下のようにhello, world
を出力するだけの簡単なコマンドを作成します。
Pythonファイルの作成
任意のディレクトリにsample.py
を作成し、以下のコードを実装します。
※ コード内に日本語でコメントしていますが、実際に日本語を使うとエンコードエラーになります。
# カスタムコマンド実行時に実行される関数 (引数を4つ受け取ることができれば何でもいい) def hoge(debugger, user_inputs, result, internal_dict): print("hello, world") # デバッガーにロードされる際に実行される関数 def __lldb_init_module(debugger, internal_dict): # sample.pyのhoge関数をhello_worldコマンドとしてロード debugger.HandleCommand('command script add -f sample.hoge hello_world')
作成したカスタムコマンドを使用するための準備
コンソールで以下を実行しましょう。デバッガーにカスタムコマンドがロードされます。
command script import <任意のパス>/sample.py
これで準備完了です。実際に使ってみましょう
使ってみる
ほいさ、実行できました。
自動的にカスタムコマンドをロードする
実はコンソールからロードしたカスタムコマンドは、一度でもデバッグセッションを切ると使えなくなるため、 次回デバッグ時に再度ロードしなくてはいけません。毎回ロードするのは面倒くさいので自動的にロードするための設定をします。
.lldbinit
を使って自動的にロードする
.lldbinit
という名のファイルに任意のコマンドを記載してホームディレクトリ(~/
)に置いておくと、
デバッグ実行時に記載したコマンドを実行してくれるようになります。
すなわち、以下のように.lldbinit
に書いておけば、デバッグ実行時に自動的にカスタムコマンドが使える状態になるのです。
command script import <任意のパス>/sample.py
.lldbinitの注意点
.lldbinit-Xcode
というファイルがホームディレクトリに存在していると、XCodeでデバッグ実行する場合に.lldbinit
が読み込まれなくなります。