Xcode+gdbデバッガでPostgreSQLモジュールをちょっとだけ動かしてみた
前置き
PostgreSQL解読室というサイトを以前やっていて、2年くらい更新が止まっているのですが、もう何ヶ月かしたら再開したいと考えています。
その準備の一環で、XcodeでPostgreSQLをデバッグビルドして、Xcode+gdbデバッガでPostgreSQLのモジュールをちょっとだけ動かしてみました。
Xcodeを使うのは初めてなので、変なところがあったらご容赦を。
Xcodeの準備
XcodeはiMacを買うと、付属のCDでついてくるが、最新版はADC*1というところからダウンロード可能。
ただし、ユーザー登録が必要。
怪しいところではないと思うので、ユーザー登録した。
今回は、バージョン3.1.3をダウンロードして使用。
ソースコードの準備
任意のディレクトリに、ソースコードを展開して、configureをかける。
(今回はpostgresql-8.3.7を使用しました。*2)
$ ls postgresql-8.3.7.tar.gz $ tar xf postgresql-8.3.7.tar.gz $ ls postgresql-8.3.7 postgresql-8.3.7.tar.gz $ cd postgresql-8.3.7 $ ./configure
configureが終わったら、makeできるようになる。
しかし、ここによると、gccに-gオプションをつけないとデバッガのブレークポイントがきかない。
ブレークポイントを使えるようにするためには、Xcodeにも設定が必要だが、それは後にする。
-gオプションをどうつけるかだが、今回は、srcフォルダ直下のMakefile.global内で指定されている変数CCの指定に、-gオプションを加えてみた。
$ cd src $ pwd (任意のフォルダ)/postgresql-8.3.7/src $ ls Makefile.global Makefile.global $ cp -p Makefile.global Makefile.global.org $ vi Makefile.global
変更内容はこんな感じ。
$ diff Makefile.global.org Makefile.global 213c213 < CC = gcc -no-cpp-precomp
-
- -
Xcodeプロジェクト作成
今回プロジェクトファイルをソースファイルのディレクトリ内に作ってしまう。
ソースファイルの中に作ってしまって大丈夫なのか心配なので、今までの内容をバックアップしておく。
$ ls postgresql-8.3.7 postgresql-8.3.7.tar.gz $ cp -pr postgresql-8.3.7 postgresql-8.3.7_configured $ ls postgresql-8.3.7 postgresql-8.3.7.tar.gz postgresql-8.3.7_configured $
これで何かあっても戻せる。
Xcodeのプロジェクトの作り方は、ここやここが参考になる。
Xcodeを起動して、[ファイル]-[新規プロジェクト]を選択。
ソースファイルのフォルダ名を[名前]に記入して、[保存]をクリックすると、置き換えてもいいですかと聞かれる。
プロジェクトが作成されたようで、なんかウィンドウが出た。
しかし、置き換えてもいいですかとか聞かれたので、少し不安になる。
もとのソースファイルの構成とか壊してないよね?
確認してみる。
$ ls postgresql-8.3.7 postgresql-8.3.7.tar.gz postgresql-8.3.7_configured $diff -r postgresql-8.3.7_configured postgresql-8.3.7 Only in postgresql-8.3.7: build Only in postgresql-8.3.7: postgresql-8.3.7.xcodeproj $
よしよし、なんか追加されただけだ。壊してない。
Xcodeでビルドしてみる
ターゲットというのを作ると、ビルドができるようだ。
試しにやってみる。
「ターゲット」をコントロールキー押しながらクリックして、[追加]-[新規ターゲット]を選択。
[External Target]を選択。この辺の手順は参考サイトのほうが詳しい。
ウィンドウにターゲットの情報が出てくる。
「カスタムビルドコマンド」の「ディレクトリ」の選択ボタンをクリック。
postgresql-8.3.7を選択して選択ボタンをクリック。
そろそろ独自性を出してみると、この状態でもうビルドができる。
なのでやってみる。メニューの[ビルド]-[ビルド]を選択する。
左下に、小さく「Running external build tool」と出たら、しばらく待つ。
終了すると、左下に、「ビルドは問題なく完了しました(1個の警告)」と出る。
まあとりあえず警告は気にしない。
春に買った自分のiMacでは、数分で終了。
すげえ。やはり時代は変わった。
Xcode+gdbデバッガを動かしてみる
デバッガを動かすには、環境設定を少しだけ変えておく必要がある。
[Xcode]-[環境設定]を設定して、環境設定画面を開く。
ここで、ネット上の各所に書かれているように、右上の「シンボルを読み込む方法」にチェックが入っていると、ブレークポイントで処理が止まらない。チェックを外しておく。
また、Xcodeを導入したばかりだと、左側の「開始時」の設定が「何もしない」になっている。これはそのままでも動くが、初心者の自分としては、設定を間違えていて動かないときになにも情報がないと不安になるので、「コンソールとデバッガを表示」にしておく。
それでは、試しにちょっとだけ動かしてみる。
どうせちょっとだけなので何でもいい。initdbにしてみる。
左の枠内の「実行可能ファイル」をコントロールキー押しながらクリックして、[追加]-[新規カスタム実行可能ファイル]を選択。
「実行可能ファイル名」と、「実行可能ファイルのパス」をinitdbのものに指定して、「完了」をクリック。
「実行可能ファイル」の下に「initdb」ができて、さらに「実行可能ファイル“initdb”の情報」なるウィンドウが出てくる。出てきたウィンドウは閉じて問題ない。
ではさっそく、initdbをデバッガで動かしてみる。
まず、ブレークポイントを設定してみる。
[ファイル]-[開く]で、initdb.cを選択して開く。
試しにmain()の最初にブレークポイント設定。
参考にしたサイトには、「ブレークポイントごとに場所(Location)を指定してやらないと動かない」と書いてあったけど、自分の環境ではしなくても動いた。
理由は確認してない。ごめん。
すでに実行ファイルは存在するけど、目立つところにボタンがあるので、「ビルドして進行」をクリック。
デバッガとデバッガコンソールが出てくる。
なんか、ブレークポイントとちがうところで処理が止まってるような気がするけど、自分の場合は、とりあえず止まればいいので、今のところ気にしない。