短期集中連載? LibreOfficeをWindowsで開発してみよう:その③ Visual Studioで開発できるようにする
今回も夜までの更新間に合わなくて翌日朝更新。だって試行錯誤のためにフルビルドやり直しになっちゃったんだもん……。
GWの間にLibO開発できる環境をWindowsで作ろうの連載3回目。環境作るだけじゃなくてできればバグつぶしてコミットするところまで行きたい。
本日は、LibreOfficeはちゃんとIDE連携があるので、そいつを使ってVisual Studio 2019 Communityで開発できるようにしてみましょう。
先に結論:
./autogen.sh
実行時に--enable-debug
忘れずに。- makeに
vs2019-ide-integration
ってターゲットがちゃんとあるのでそれを使おう。
VS2019向けソリューションの作成
LibreOfficeの開発環境の各種IDE連携については、TDFのWikiにちゃんと説明があります。
で、Visual Studioの説明を見てみますと、どれどれ……。
For Visual Studio 2017:
make vs2017-ide-integration
For Visual Studio 2015:
make vs2015-ide-integration
あれ? VS2019の説明がない。
まあ、とりあえずやってみましょう。
make vs2019-ide-integration
お、通った! これはドキュメントが更新されてないってことですね*1。
見ると、ちゃんとVSで読めるソリューションファイルできてる。素晴らしい。ではあとはVS 2019で読み込めばいいのかな?
って、Wikiを見ると、
Note:
You need to build with --enable-debug in order to generate the Visual Studio IDE integration.
ってあるけど……なくても通っちゃったから別にいいのかなー。
VS2019で読み込んでみる
ということで、生成されたソリューションを読み込んでみました……えいっ。
……いけました!
デバッグ実行を試してみたら、ちゃんと自前ビルドしたLibreOfficeも起動します。おーーー。 ただ、起動までが猛烈に遅いんですけどこれは仕方ないのかなあ……。
しかしデバッグができない……。
では、ためしに適当なところにブレークポイント張って、デバッグ実行できるか試してみましょう。
というのはもちろん、さっきのドキュメントの注意書き「--enable-debug
しないとだめだよ」が気になってるからですが。
結果をいうとだめでした。 ロジック上はまず通るだろうと思うところにブレークポイント張っててもすこっと抜けちゃう。 ブレークポイントにマウスカーソル当ててみると「シンボル読みこめないからこのブレークポイント無効だよ」みたいなことが書いてある(細かな文言メモってなかったです、すみません)。
あーそうなんだー、やっぱ --enable-debug
ないとだめかー。
ということで、まずはVSを閉じてから、
./autogen.sh \ --with-lang=ALL \ --enable-64-bit \ --with-jdk-home=/cygdrive/c/Program\ Files/AdoptOpenJDK/jdk-8.0.252.09-hotspot/ \ --enable-debug
としといてから、念のため make clean
して、
make && make vs2019-ide-integration
して一晩放置しました。
再びチャレンジ……うまくいった、か?
さて一晩経って処理終わってたので、再びVS開いてソリューションを開きなおし、F5キー叩いてデバッグ実行……ん?!
なんか関係ないところで例外吐いてブレークするんですけど……?(OpenCLがどうとかこうとか)
が、しかし、例外吐いてブレークするということは、デバッグは正常に動いてるということになります。
なので、「一回デバッグなしで起動しておいて、起動後デバッグアタッチする」という方法でやってみたら……。
おお、ちゃんとブレークしますね。
ということで、Visual Studio 2019で無事デバッグできるようになった。よかったよかった。
なお、さっき書いた「なんか関係ないところで例外吐いてブレークする」は、一度デバッグ実行できるようにあったら再発しなくなりました……なんぞこれ。 初回起動時にしか通らないロジックとかなのかなあ。 まあ、支障はないので、とりあえず放置することにします(弱い)。
難点
とにかくデバッグ実行の起動がすごく遅いです。
LibOのソースの構成は、内部でたくさんのサブコンポーネントがあるわけですけど(参照: Development/Code Overview - The Document Foundation Wiki)、 こいつらが全部DLLとなる関係で、実行のたびに各DLLのビルドプロセスが走るみたいで、 まあその数が50個ぐらいあるわけですから、ソースに変更がない(ビルド不要)という判定をするだけでもだいぶ待たされます。
これ、なんとかならんのかなあ……。そこらへんはおいおい調査ですかね。
できれば、今日は具体的にソースを読み解いて問題を解くところまでやりたいですね。頑張りましょう。