月別アーカイブ: 2015年10月

keystone をリモートデバッグする

EclipseのPydevプラグインを使い、Keystoneをリモートデバッグできたので、記録を残します。Eclipseは以前Javaによる開発で使っていたので、Eclipseについては飛ばします。

環境

  • Ubuntu Desktop 14.04.3
  • Eclipse Mars (4.5)
  • Keystone Liberty 開発サイクル

Eclipseインストール

EclipseはJava 開発者向けなどインストールに際するの選択肢が多いですが、 Eclipse Platform でよいです。Eclipseインストール後、Egit plugin、Pydev plugin をインストールします。

Keystone プロジェクト作成

Egit にて、Keystone を clone します。cloneした プロジェクトの Working directory を右クリックして Import Projects… をクリックし Import as general project を選択し、とりあえずインポートします。インポートできたらプロジェクトを右クリックし、Pydev から Set as Pydev Project を選択します。Python not configured が出た場合は、一番左にある Quick Auto-Config をクリックします。

python_not_configured

Python package インストール

python-six アンインストール

debパッケージの six ではのちにエラーになるため、python-six パッケージを削除します。

$ sudo apt-get autoremove python-six

pip インストール

debパッケージでなく、最新の pip をインストールしないとのちにエラーになるため、最新の pip をインストールします。https://pip.pypa.io/en/stable/installing/から get-pip.py をダウンロードしてインストールします。

keystone の依存パッケージインストール

git がないとのちにエラーになるため、git をインストールします。

$ sudo apt-get install git

Keystone の開発ドキュメントに従い、以下を実行します。

$ sudo apt-get install python-dev python3-dev libxml2-dev libxslt1-dev libsasl2-dev libsqlite3-dev libssl-dev libldap2-dev libffi-dev
$ sudo pip installl -r requirements.txt
$ sudo pip installl -r test-requirements.txt
$ sudo pip setup.py develop

keystone 設定ファイルコピー

Keystone の開発ドキュメントに従い、以下を実行します。

$ cp etc/keystone.conf.sample etc/keystone.conf

Eclipse設定

pysrc を PYTHONPATH にいれる

デバッグに必要な pydevd を python のパスに含めるため、pysrc を PYTHONPATH に含めます。pysrc の場所は以下コマンドで探します。

$ find ~/ -name 'org.python.pydev_*'

たとえば ./.p2/pool/plugins/org.python.pydev_4.3.0.201508182223 のようなものです。

実際にPYTHONPATHに含めるには、プロジェクトを右クリックしてPropertiesを選択。Pydev – PYTHONPATH をクリックし、External Libraries タブをクリックします。。Add source folder をクリックし、pysrc を選び、OK をクリックします。pysrc が . から始まるフォルダにある場合は、ホームディレクトリをクリック後、左上にある鉛筆アイコンをクリックし、直に入力する必要があります。

PYTHONPATH

起動設定

プロジェクト – cmd – all.py を右クリックし、Run As – Run Configurations… を選択します。Name: を適切な名称に変更し、Main タブで Main Moduleに /usr/local/bin/keystone-all を入力し、Apply をクリックします。
Run Configurations - Main

Arguments タブをクリックし、Program arguments: に –standard-threads と入力し、Apply をクリックし OK をクリックします。
Run Configurations - Arguments

設定

デバッグが始まるように、keystone/controllers.pyのdef _get_versions_list(self, context):の下に以下のコードを入れます。

import pydevd
pydevd.settrace('127.0.0.1', port=5678, stdoutToServer=True, stderrToServer=True)

pydevd

デバッグサーバ起動

Debug Perspective に移動し、メニューからPydev – Start Debug Server をクリックします。左下の Console で Debug Server at port: 5678 と表示されたことを確認します。

Keystone 起動

Pydev Perspective に移動し、メニューから Run – Run Configurations を選択し、右下のRun をクリックします。Console に Started child が4行表示されたことを確認します。

デバッグ実行

ターミナルから以下を実行します。

$ curl http://127.0.0.1:35357/v3

戻り値がなく、Eclipse の画面を見ると、def _get_versions_list(self, context): の下に入れたコードのしたで止まっている(左側に右矢印が表示されてる)ことを確認します。
debug

あとは、Debug Perspective に移動し、ステップ実行などができます。