naru.jpn.com/wordpress

Programming, Computing etc.

Xcodeを利用してlldbでPerl5の実行中の情報を調べる

前回はターミナルからlldbを使って実行中の情報を見ました. Xcodeを利用して, 既存のMakefileからIDE上でビルド, ブレークポイントの設置などを出来るようにし, より簡単に分かりやすくデバッグをできるようにします.

Xcodeプロジェクトの作成と初期設定

まずはXcodeプロジェクトを作成します. 今回は既存のMakefileを利用しますが, この場合には External Build System というところからプロジェクトを作成します.

次に出てくる画面で適当な Product Name を入力します. 僕は Perl5 としました. Build Tool ははじめから /usr/bin/make となっていると思いますし, Product Name 以外の項目は変更する必要はないと思います.

perl5.xcodeproj というファイルができますが, 今回はこのファイルをソースファイル達と同じ階層に置いておくことにします. どこでもいいのですが, パスの指定がちょっと簡単になるからです.

次にプロジェクトファイルをダブルクリックで開き, プロジェクトファイルを選択し, Info タブを選択した先にある Directory に $(PROJECT_DIR) と入力します.

初期設定は以上です.

プロジェクトへのファイルの参照の追加

Xcode上でブレークポイントを貼ったりコード内を検索するためには, プロジェクトにファイルの参照を追加する必要があります. すべてのcファイルとhファイルをプロジェクトに追加しましょう.

ファイルの参照を追加する際には, Finder上で「種類」でソートをすると, そのまままとめてプロジェクト上へドラッグ&ドロップすればいいだけなのでとても楽です.

ビルド後の実行対象と引数の設定

ビルドが完了した後に, 生成された perl プログラムに引数として適当なperlプログラムを渡して, そのまま実行されるように設定しておきます.

ウィンドウの左上にある perl5 をクリックし, Edit Scheme… から Run を選びます. まず, Info タブにある Executable の変更をします. Other… という選択肢から, make によって作られた perl の実行ファイルを選択します.

次に, 引数として渡すperlプログラムの指定を Arguments タブから行います. 前回使用したものと同じ, 1秒間のsleepを無限ループで実行するプログラムのパスを指定しています.

ブレークポイントの設置と実行

実行の前に, ブレークポイントを張ります. 前回の結果から, sleep 関数を呼んだ際に pp_sys.c ファイルの PP(pp_sleep) の行が呼ばれることは既に分かっています. 該当の行の少し下にブレークポイントを張ります.

いざ, 実行!

止まりました. (lldb) と表示されているところに lldb のコマンドを打つと実行されますし, ウィンドウ左端に表示されているバックトレースの各項目をクリックするだけで main 関数から現在呼ばれている関数の間のコードも簡単に閲覧できます.