linuxBean14.04(164)LibreOfficeのC++の拡張機能の例をEclipseでデバッガにかける

2017-04-23

旧ブログ

t f B! P L
LibreOfficeの拡張機能のC++の例をデバッグするためにEclipse IDE for C/C++ Developersをインストールしました。いつものことながら、まずEclipseでやってみてよくわからずNetBeansでやってみてなんとなくヒントをつかみ、CUIでうまくいって、またEclipseに戻ってきましたが、ブレークしかできませんでした。

前の関連記事:linuxBean14.04(163)OUStringの文字列をgdbで見る方法


Eclipse IDE for C/C++ Developers Neon.3 Release (4.6.3)のインストール



Eclipse Downloadsからeclipse-cpp-neon-3-linux-gtk.tar.gzをダウンロードしました。

解凍してでてきたeclipseフォルダをelipse4.6cppと改名しました。

-vm
/usr/lib/jvm/java-8-openjdk-i386/bin

フォルダ内のeclipse.iniの先頭にJDK8へのパスを設定しました。

/optフォルダにこのeclipse4.6cppフォルダを移動させて、eclipse4.6cppで起動しました。

起動するとWorkspaceを確認されるので~/workspace4.6/cppにしました。


起動時にGitflow supportとStartExplorerをインストールするか聞かれましたのでインストールしました。


Install Remediation Pageが表示されました。

linuxBean14.04(143)Eclipse Mars.2でGit Flowツールの導入でもでてきたものです。

またGitflowのインストールがうまくいかないような気もしますがそのままNextにしてインストールしました。


Eclipseを再起動してHelp→Installation Detailsで確認するとGitflowとGitが同じバージョンなので問題ないようです。

とりあえずlinuxBean14.04(142)Eclipse Mars 2のインストールの「全角空白文字だけ記号を表示させる」の設定とフォントをRictyに変更しました。

ランチャもこれまでと同様にして作成しました。

C++の拡張機能の例complextoolbarcontrolsのソースのリンクをEclipseのプロジェクトに取り込む


LibreOfficeのSDKのC++の拡張機能の例のソースをEclipseのプロジェクトに取り込みます。

File→C++ プロジェクト。


Project nameをcomplextoolbarcontrolsにして、Project typeはShared Library→Empty Project、ToolchainsはLinux GCCを選択しました。

でもEclipseでコンパイルするわけではないので、これらはどうでもよいと思います。

Finish。

complextoolbarcontrolsのソースをインポートします。

Project Explorerでいま作成したcomplextoolbarcontrolsプロジェクトを右クリック→Import。

General→File System。

Next。


/opt/libreoffice5.2/sdk/examples/cpp/complextoolbarcontrolsをFrom directoryに指定します。

AdvancedボタンをクリックしてOptionsのCreate links in workspaceにチェックをつけて、その下に二つのチェックボックスもチェックします。


これでソースの取り込みは完了です。

Import画面でSelect Allボタンをクリックした後にFileter Typesボタンをクリックすると取り込むファイルを拡張子で選択できます。

ソースファイルのリンクがプロジェクトフォルダに表示されますが、リンクだけなのでworkspaceのプロジェクトフォルダをみてもソースファイルはありません。

Eclipseでブレークポイントを張る


gdbだけでできることをわざわざEclipseでやるのはこのブレークポイントの設定と変数の内容をGUIで見るためです。

ブレークポイントを設定する場所はlinuxBean14.04(162)LibreOfficeのC++の拡張機能の例をCUIのデバッガにかけると同じメソッドの中にしました。


エディタでMyProtocolHandelr.cxxを開くとエラーがいっぱい出ていますが、気にせず218行目の行頭をダブルクリックしてブレークポイントを設定しました。

プロジェクトのバイナリを指定する


complextoolbarcontrolsのソースのバイナリはlinuxBean14.04(132)LibreOfiice5.2のSDKの例をコンパイルするでコンパイルして、できあがったcomplextoolbarcontrols.oxtはすでにLibreOfficeの拡張機能に登録してあります。

コンパイル後のバイナリのcomplextoolbarcontrols.uno.soは~/.config/libreoffice/4/user/uno_packages/cache/uno_packages以下のフォルダのどれかにあるcomplextoolbarcontrols.oxtフォルダの中のLinux_x86フォルダにあります。

しかしこれは単にShared Libraryなので、起動できないのでgdbのCUIでやったときと同様にsoffice.binをバイナリに指定します。

complextoolbarcontrolsプロジェクトを右クリック→Properties。

Run/Debug Settings。


Editボタンをクリック。


C/C++ Applicationにsoffice.binを指定しました。

このプロジェクトだけではビルドできずにエラーが出るのでBuild (if required) before launchingはDisable auto buildを選択してビルドしないようにします。

これで準備完了です。

C++の拡張機能でブレークする


complextoolbarcontrolsプロジェクトを右クリック→Debug As→Debug Configurations。

1 Local C/C++ Applicationを選択してもBinary not found.と言われて先に進めないので、Debug Configurationsを選択しないといけません。


エラーがあると言われますが、「Proceed」ボタンをクリックして続行します。

Debugger Consoleを見るとNo symbol table is loaded. Use the "file" command.というエラーが二つでていました。

これはsoffice.binが-gオプションでコンパイルしていないからでているものと思われます。


Debugパースペクティブに切り替えるのか聞かれるのでOKで切り替えます。


main()関数でブレークされています。

しかしソースがないのでソースは何も表示されません。


main()関数でまずブレークされるのは、Debug ConfigurationsのDebuggerタブを見ればわかるようにデフォルトでmain()関数で止まるように設定されているからです。

LibreOfficeの拡張機能だけのデバッグではmain()関数をみる必要はないのでこのチェックは外しておいてよいかもしれません。→結局はずしました。


ResumeボタンをクリックするとLibreOfficeが起動します。

前回gdbで起動していた場合はドキュメントの回復が表示されるので、復元データの破棄→はい、にして起動しました。

LibreOfficeのスタート画面が表示されるのでWriter文書ドキュメントボタンをクリックします。

complextoolbarcontrolsツールバーの左端の画像ボタンをクリックするとEclipseに切り替わります。


先ほど設定したMyProtocolHandelr.cxxのブレークポイントで止まりました。

ここからステップ実行もできました。


しかし、変数の文字列は見えません。

.gdbinitのマクロで設定したpouで変数の中身をみる


linuxBean14.04(163)OUStringの文字列をgdbで見る方法と同様にして.gdbinitを有効にしますのがそのままではTUIモードが許可されていないというエラーがでてgdbが起動できません。

EclipseでlinuxBean14.04(163)OUStringの文字列をgdbで見る方法の.gdbinitを使うにはその8行目のtabset 4というコマンドをコメントアウトしておきます。

EclipseのRun→Debug Configurations。


DebuggerタブでGDB command fileに~/.gdbinitを選択しました。

これで先ほどと同様にしてブレークします。


止まったところでDebugger Consoleをでpouコマンドを入力します。

プロンプトはでていませんが、コマンドは普通に入力できました。


変数の中身が確認できました。

出力されるまで時間がかかるのはCUIのときと同じです。

まあこれでなんとかなりそうですね。

Paths and Symbolsを設定する


デバッグには全く必要ありませんが、役立つと思って最初やったことなので記録しておきます。

何を設定するのかlinuxBean14.04(132)LibreOfiice5.2のSDKの例をコンパイルするで取得したMakefileのログをみます。

-I. 
-I/home/pq/libreoffice5.2_sdk/LINUXexample.out/inc 
-I/home/pq/libreoffice5.2_sdk/LINUXexample.out/inc/examples 
-I../../../include 
-I/home/pq/libreoffice5.2_sdk/LINUXexample.out/inc/complextoolbarcontrols 

gccの-Iオプションの引数はこのようになっていました。

.は/opt/libreoffice5.2/sdk/examples/cpp/complextoolbarcontrolsを指していますので、これらのフォルダの絶対パスは次のようになります。

/opt/libreoffice5.2/sdk/examples/cpp/complextoolbarcontrols
~/libreoffice5.2_sdk/LINUXexample.out/inc 
~/libreoffice5.2_sdk/LINUXexample.out/inc/examples 
~/libreoffice5.2_sdk/LINUXexample.out/inc/complextoolbarcontrols 
/opt/libreoffice5.2/sdk/include

-Iオプションはインクルードファイルを検索するパスを指定しています。

次にg++の-Lオプションの引数を見てみます。

-L"/home/pq/libreoffice5.2_sdk/LINUXexample.out/lib" 
-L"/opt/libreoffice5.2/sdk/lib" 
-L"/opt/libreoffice5.2/sdk/../program" 

これらを絶対パスに変換すると次のようになります。

~/libreoffice5.2_sdk/LINUXexample.out/lib
/opt/libreoffice5.2/sdk/lib
/opt/libreoffice5.2/program

g++はgccとオプションは同じはずなので-Lオプションはライブラリを探すパスを指定しているはずです。

これらをcomplextoolbarcontrolsプロジェクトに指定します。

complextoolbarcontrolsプロジェクトを右クリック→Properties。

Paths and Symbols。

まずIncludesタブのAddボタンをクリック。


Add to all languagesにチェックをつけてFile systemボタンをクリックします。

これで先ほど確認した-Iオプションで指定されたパスを指定します。


存在しないパスは無視しました。

Add to all languagesにチェックを付けたのでAssemblyでもGNU CでもGNU C++も同じパスが指定されているはずです。


同様にしてLibrary Pathsを指定しました。

これはすべて存在していました。


ビルドしないと反映されないようですのでこれは一応Yesにしました。

だけど、これをしたところでDebuggingItに書いてある.gdbinit以外の方法はうまくできませんでした。

参考にしたサイト


LibreOffice 5.3 SDK - Examples
このC++のcomplextoolbarcontrolsの例をデバッガにかけました。

Eclipse Downloads
Eclipse IDE for C/C++ Developersをダウンロードしてインストールしました。

Debugging with GDB: 25.4 TUI固有のコマンド
EclipseのDebugger Consoleでは.gdbinitファイルでtabsetコマンドを使うとエラーになります。

C/C++のコンパイルについてメモ - Qiita
gccオプションの解説。

次の関連記事:linuxBean14.04(165)faif/python-patternsでデザインパターンの学習

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ