linuxBean14.04(159)unohelper.ImplementationHelper()をデバッガにかける

PythonモジュールをUNO Python componentにするときに使うunohelper.ImplementationHelper()のことが調べてもよくわからなかったのでデバッガにかけてみました。理解できたことはunohelper.pyの次にpythonloader.pyが呼ばれることぐらいでした。

前の関連記事:linuxBean14.04(158)Pythonモジュールを多言語対応にする


EclipseでUNO Python ObjectのPyDevプロジェクトの作成


linuxBean 14.04

LibreOffice 5.2.6.2 (linuxBean14.04(131)LibreOfiice5.2のインストール参照)

Eclipse Java EE IDE for Web Developers. Version: Neon.2 Release (4.6.2)

PyDev5.5.0

これらを使ってlinuxBean14.04(149)LibreOfficeマクロ開発環境の構築:その1と同様にしてPyDevプロジェクトを作成します。

unohelper.ImplementationHelper()を使う例としてPython-UNO bridge
のtuplestrm.pyを使います。

ElicpseでFile→New→PyDev Project。

プロジェクト名はLibreOfficeRemoteDebugにしました。

インタープリターは/opt/libreoffice5.2/program/pythonです。

Create 'src' folder add it to the PYTHONPATHを選択してFinishしました。

プロジェクトのsrcフォルダにpyファイルを作成しそこにPython-UNO bridgeのtuplestrm.pyのコードを入れてインデントを修正してtuplestrm.pyという名前で保存しました。

このままではLibreOfficeからみてPYTHONPATHにないのでlinuxBean14.04(149)LibreOfficeマクロ開発環境の構築:その1と同様にうGitリポジトリにしてWorking Treeをマイマクロフォルダにします。

PyDev Package ExplorerでLibreOfficeRemoteDebugプロジェクトを右クリック→Team→Share Project。

Createボタンをクリックして~/.config/libreoffice/4/user/Scripts/python/LibreOfficeRemoteDebugというフォルダを作成して選択しました。

するとWorking treeもこのフォルダになります。

 tuplestrm.pyにデバッグコードを挿入します。

 import pydevd; pydevd.settrace()

これをg_ImplementationHelper = unohelper.ImplementationHelper()の前の3行目に挿入しました。

とりあえず最初のコミットをしておきます。

pydevdモジュールへのPYTHONPATHを通す


LibreOfficeからpydevdモジュールをインポートできるようにPYTHONPATHを通します。

~/.local/lib/python3.5/site-packagesのsites.pthに以下のパスを追加しました(linuxBean14.04(38)LibreOfficeバンドルPythonにパッケージを追加参照)。

/opt/eclipse4.6jee/plugins/org.python.pydev_5.6.0.201703221358/pysrc

うーん、ここでこのフォルダがここにないことに気が付きました。

奇妙なことに一般ユーザーでPyDevをインストールするとpluginsフォルダにPyDev関係のフォルダが何もでてきません。

だけどpydevd以外の操作はできてしまいます。

理解に苦しむ現象ですけどpydevdへのパスを設定したいのでlinuxBean14.04(133)Eclipse4.6(Neon)とPyDev5.4のインストールの通りrootでPyDevをインストールし直しました。

デバッグサーバーを起動する


デバッグコードを挿入した部分を拡張機能を拡張機能マネージャーに登録した時点で実行されるのでまずデバッグサーバーを起動しておかないといけません。

Eclipseでデバッグパースペクティブにして、PyDev→Start Debug Server。

ConsoleビューにDebug Server at port :5678と出てくるはずです。

Eclipseはこのままにしておきます。

UNO Python Objectを拡張機能マネージャーに登録する


LibreOfficeを起動してツール→拡張機能マネージャー。

追加ボタンをクリックして先ほど作成したLibreOfficeRemoteDebugフォルダのsrcフォルダにあるtuplestrm.pyを選択して登録します。

選択するときはファイルフィルターをUNO Python Componentにしていないとpyファイルが見えません(LibreOffice5(6)既存インターフェイスを継承してPythonスクリプトをUNOコンポーネント化する例:その1参照)。

ファイルを選択してOKするとLibreOfficeが動かなくなります。

Eclipseを見てみるとデバッグコードの部分でブレークされていることがわかります。


LibreOfficeの拡張機能のキャッシュに展開されたソース上でブレークされていることがわかります。

参考にしたサイト


Python-UNO bridge
UNO Python componentの例がExamplesにいくつかあります。

次の関連記事:linuxBean14.04(160)Pythonのsys.executableは環境変数PATHを参照しているらしい

PR

0 件のコメント:

コメントを投稿