ペンギン村 Tech Blog

技術をこよなく愛するエンジニア集団が在住するペンギン村から、世界へ役立つ(かもしれない)技術情報を発信する技術系ブログです。某アラレちゃんが済む村とは一切関係ありません。んちゃ!

LLDBカスタムコマンドを作る

概要

LLDBのpoコマンドのような、コンソールで利用できるカスタムコマンドを作成します。

Hello Worldコマンドを作る

今回はカスタムコマンド作成方法の土台を知るために、 以下のようにhello, worldを出力するだけの簡単なコマンドを作成します。 f:id:po_miyasaka:20190908155026p:plain

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

これで準備完了です。実際に使ってみましょう

使ってみる

f:id:po_miyasaka:20190908161533p:plain
ほいさ、実行できました。

自動的にカスタムコマンドをロードする

実はコンソールからロードしたカスタムコマンドは、一度でもデバッグセッションを切ると使えなくなるため、 次回デバッグ時に再度ロードしなくてはいけません。毎回ロードするのは面倒くさいので自動的にロードするための設定をします。

.lldbinitを使って自動的にロードする

.lldbinitという名のファイルに任意のコマンドを記載してホームディレクトリ(~/)に置いておくと、 デバッグ実行時に記載したコマンドを実行してくれるようになります。

すなわち、以下のように.lldbinitに書いておけば、デバッグ実行時に自動的にカスタムコマンドが使える状態になるのです。

command script import <任意のパス>/sample.py

.lldbinitの注意点

.lldbinit-Xcodeというファイルがホームディレクトリに存在していると、XCodeでデバッグ実行する場合に.lldbinitが読み込まれなくなります。