LibreOffice5(15)Javaの例をデバッグ情報を追加してビルドする

前の関連記事:LibreOffice5(14)Calcに関数を追加するPython拡張機能の例その2


linuxBean14.04(29)LibreOfficeDev5.0SDKの例を一括でmakeするでデベロッパーガイドの例を一括makeしたのですが、gオプションが付けずにビルドしていたためJavaのデバッガで変数の中身がみれませんでした。

デバッガをアタッチしても変数の値が見れない


Eclipseでデバッガをアタッチしても変数が引数になったものしか値がみれないのでおかしいなと思って四苦八苦しましたが、解決しないのでNetBeansでやってみました。


gオプションを使用せずにコンパイルされているので変数の情報は使用できないそうです。

ということで-gをつけてMakeし直します。

環境変数JAVAC_FLAGSに-gを代入するにはsdk/settings/settings.mkを編集する


(2017.4.19追記。settings.mkを編集しなくてもmakeの引数でDEBUG=yesとすれば-gオプションを有効にできました。make_all.shは修正済ですのでsettings.mkの編集は不要になりました。)

linuxBean14.04(37)失敗したLibreOfficeSDKの例を再make:その4でみたようにSDKの例のMakefileではjavacのオプションは環境変数JAVAC_FLAGSにいれればよいことがわかります。

まずはlinuxBean14.04(83)LibreOfiice5.0.2のインストールでつくったsetsdkenvランチャで起動したTerminalですでにJAVAC_FLAGSに値が入っているか確認します。
 ************************************************************************
 *
 * SDK environment is prepared for Linux
 *
 * SDK = /opt/libreoffice5.0/sdk
 * Office = /opt/libreoffice5.0/sdk/..
 * Make = /usr/bin
 * Zip = /usr/bin
 * cat = /bin
 * sed = /bin
 * C++ Compiler = /usr/bin
 * Java = /usr
 * SDK Output directory = /home/pq/libreoffice5.0_sdk
 * Auto deployment = NO
 *
 ************************************************************************

pq@pq-VirtualBox:/opt/libreoffice5.0/sdk/examples/DevelopersGuide$ echo $JAVAC_FLAGS

pq@pq-VirtualBox:/opt/libreoffice5.0/sdk/examples/DevelopersGuide$
echo $JAVAC_FLAGSの結果は何も出力されませんでした。

linuxBean14.04(29)LibreOfficeDev5.0SDKの例を一括でmakeするで作ったシェルスクリプトmake_all.shを作り直します。
JAVAC_FLAGS=-g # javacのオプション-gをつけてデバッグ情報をクラスファイルに付加する。
この一行を追加するだけで解決と思ったらシェルから実行したshファイル内で設定した環境変数はexportしたとしても実行元のシェルには反映されませんでした。
#javacのオプション-gをつけてデバッグ情報をクラスファイルに付加する。
JAVAC_FLAGS=-g
export JAVAC_FLAGS
echo "javacに$JAVAC_FLAGSオプションを追加しています。"
仕方ないので~/libreoffice5.0_sdk/pq-VirtualBox/setsdkenv_unix.shの最後にこれを追加しました。

パスの最後のフォルダ名はコンピューター名になっています。

あとはlinuxBean14.04(83)LibreOfiice5.0.2のインストールと同様にして~/libreoffice5.0_sdkにmake_all.shを置いてbash make_all.shを実行します。

ソースファイルを変更したわけではないのでこのままmakeしてもすでにビルドしたファイルは更新されませんのでまず~/libreoffice5.0_sdk/LINUXexample.outフォルダがあればそれを他に移しておきます。

setsdkenvランチャでTerminalを起動します。

bash ~/libreoffice5.0_sdk/make_all.sh

ダメです。

echo $JAVAC_FLAGS

これで-gが返ってくるのにログをみたら-gがついていません。
###########################################################################
#
# Java settings
#
###########################################################################
JAVAC_FLAGS=

ifeq "$(DEBUG)" "yes"
JAVAC_FLAGS+=-g
endif

JAVABIN=bin
/opt/libreoffice5.0/sdk/settings/settings.mk

これの35行目でJAVAC_FLAGS=が設定されていました。

うーん今度は環境変数DEBUGの設定場所を探すとこれのすぐ上の27行目であってそれを左右している環境変数がMAKECMDGOALSとわかりました。

このMAKECMDGOALSにdebugと入っていればよいわけです。

しかしこの変数を設定している場所はわかりませんでした。
# debug option, default is no debug
DEBUG=no
ifeq "$(MAKECMDGOALS)" "debug"
DEBUG=yes
endif
DEBUG=yes
29行目でDEBUG=yesを追加しました。

今度はうまくいきました。


デバッガでちゃんと変数の情報が取得できました。

JavaのデバッグはEclipseよりもNetBeans8.0.2を使うことにした


今回Eclipseでは変数の値がデバッグできない理由がわからなかったことと、/opt/libreoffice5.0/sdk/docs/java/refにあるJavaDocが表示できなかったので今後はNetBeansを使うことにしました。

さっそく新しいマシンにNetBeans8.1をインストールしてみたらopenJDKのパスを自動認識してくれないし、プロジェクト作成ウィザードも乏しいのでアンイストールして8.0.2をインストールし直しました。
2016.6.3追記。うまくインストールができないのは私の勘違いであったようでやり直すと簡単にできました。linuxBean14.04(117)NetBeans8.1でnvmのNode.jsを使うための工夫参照。)

参考にしたサイト


Javaプログラミング・ワンポイントレクチャー:前提知識 javacコマンドを使いこなす
javac -gですべてのデバック情報がクラスファイルに追加されます。

次の関連記事:LibreOffice5(16)イベント駆動する拡張機能のJavaの例:AsyncJob.oxt その1

PR

0 件のコメント:

コメントを投稿