お世話になっております。 ■Windows環境のLibreOffice4.0.3.3で_DEBUGを有効にする手順について
・なんとか_DEBUGを有効にすることに成功しましたので、手順を展開させて頂きます。 ここまで辿り着くのにかなりの時間を費やしてしまいました。 ※一部調査が必要な項目がまだ残っています。 ◆ステップ1:solenv\gbuild\gbuild.mkの修正 「ifneq ($(COM),MSC) gb_GLOBALDEFS += -D_DEBUG \」を 「ifeq ($(COM),MSC) gb_GLOBALDEFS += -D_DEBUG \」に修正。 ・_HAS_ITERATOR_DEBUGGING=0を追加。 # free.toolcreator add start gb_GLOBALDEFS += -D_HAS_ITERATOR_DEBUGGING=0 # free.toolcreator add end ※「_HAS_ITERATOR_DEBUGGING=0」はboostをVisualStudioのデバッグ ビルドでビルドすると発生するエラーを回避するためのものです。 詳細は以下のURLを参照願います。 参考URL: http://social.msdn.microsoft.com/Forums/vstudio/en-US/03087447-620f-402b-9182-0da5ae6bf61f/boostmultiarray-vs2010debug ◆ステップ2:autoge.shの実行 ・--enable-dbgutilを付加して実行します。参考までに、私の環境のautogen.lastrun は以下のとおりです。 --disable-activex --disable-atl --with-nss-build-tools=/cygdrive/c/mozilla-build --with-ant-home=/cygdrive/d/apache-ant-1.9.0 --without-junit --with-cl-home=C:\PROGRA~2\MICROS~2.0\VC --without-help --without-myspell-dicts --enable-debug --enable-dbgutil --with-lang=en-US ja ◆ステップ3:Externalモジュールのメイクファイルの修正 ・ExternalProject_Externalモジュール名.mk <http://xn--yck6dky8fx60y.mk> の「/p:Configuration=Release」を 「/p:Configuration=Debug」に修正。 ・ExternalPackage_Externalモジュール名.mk <http://xn--yck6dky8fx60y.mk>の「#$(eval $(call gb_ExternalPackage_add_file」 のパラメータに渡されているパスのReleaseをDebugに修正。 ※少なくともlibcdr,libwpd,libmspub,libvisioに同様の修正が必要です。 ◆ステップ4:python3モジュールのメイクファイルの修正 ・ExternalProject_python3.mkの「/p:Configuration=Release」を 「/p:Configuration=Debug」に修正。 ・python3\ExternalPackage_python3.mkのlib,dll,pyd名に_dを付加します。 ※_d.lib,_d.dll,_d.pydに変更します。 ◆ステップ5:ビルドの実行 ・ビルドエラーが発生した時点で、適宜以下のステップの修正を行います。 ◆ステップ6:Externalモジュールのソリューションファイルの修正 ・libcdr,libmspub,libvisio,libwpd,liborcusのソリューションファイルを Visual Studio 2012 Express for Desktopで開いてプロジェクト変換します。 ・上記ソリューションファイルの「追加のインクルードディレクトリ」に以下を 追加します。 solver\inc\external solver\inc\zlib ・上記ソリューションファイルの「プリプロセッサ」に以下を追加します。 _HAS_ITERATOR_DEBUGGING=0 BOOST_ALL_NO_LIB(liborcusのみ。オートリンク無効化マクロ。) ※BOOST_ALL_NO_LIBとはboostのオートリンク機能で、ライブラリ名が 変更されることを防ぐためのものだそうです。 ・Visual Studio 2012 Express for Desktopでリビルドします。 ※liborcusはliborcus-static-nozipのみリビルドします。debug\orcus.libが 生成されるのでILIB環境変数が指すディレクトリにコピーします。 (ILIB環境変数の定義はconfig.statusに記載されています) ◆ステップ7:python3モジュールのソリューションファイルの修正 ・workdir\wntmsci14\UnpackedTarball\python3\PCbuild\pcbuild.slnを Visual Studio 2012 Express for Desktopで開きます。 ・構成プロパティのxxlimitedとpython3dllのReleaseをDebugに変更します。 ・ターゲット名に_dを付加します。 ◆ステップ8:testtools\source\bridgetest\cppobj.cxxのdothrow()の修正(要原因調査) ・throw ::std::bad_alloc();の後のcatchブロックのtry-catchをコメントアウトします。 ※bad_alloc例外をキャッチ出来るかのテストコードの様ですが、ビルド中に何故か キャッチ後のエラー「getCaughtException() failed!」が発生するため、コメントアウト しています。原因はまだ調査していません。 ◆ステップ9:unittestの無効化(要原因調査) ・ビルドエラーを起こすunittestを無効化します。 具体的にはModule_モジュール名.mkの 「$(eval $(call gb_Module_add_check_targets,モジュール名,\」の行をコメントアウト します。 ※これも原因がまだわかっていませんが、ビルド中にユニットテストに失敗するため コメントアウトしています。 ■Windows環境のLibreOffice4.0.3.3でmsvcrtdを使用したメモリリークチェックの方法に ついて ・現在環境構築中です。環境が出来たら、また展開させて頂きます。 以上です。 2013年8月5日 16:09 山田太郎 <free.toolcrea...@gmail.com>: > > お世話になっております。 > > ■環境変数CPPFLAGSについて > > ・autogen.shに環境変数を渡してビルドした結果ですが、config.statusは > S["CPPFLAGS"]="-D_DEBUG" > となっているのですが結果的にReleaseモードになっている様です。 > > ◆確認用コード(vcl\source\app\svmain.cxx) > (中略) > #if OSL_DEBUG_LEVEL > 0 > #include <typeinfo> > #include "rtl/strbuf.hxx" > #endif > > // free.toolcreator add start > #ifdef _DEBUG > #pragma message("######################################DEBUG MODE######################################") > #else > #pragma message("######################################RELEASE MODE######################################") > #endif > // free.toolcreator add end > > using ::rtl::OUString; > using namespace ::com::sun::star; > (以下略) > > ◆確認結果(ビルド実行結果) > (略) > [build MOD] connectivity > [build CHK] sot > ######################################RELEASE MODE###################################### > [build LNK] Library/ivcl.lib > ライブラリ C:/cygwin/home/test/Debug/libreoffice-4.0.3.3/workdir/ wntmsci14.pro/LinkTarget/Library/ivcl.lib とオブジェクト C:/cygwin/home/test/Debug/libreoffice-4.0.3.3/workdir/ wntmsci14.pro/LinkTarget/Library/ivcl.exp を作成中 > (以下略) > > ※dmake\Makefileに、 > CPPFLAGS = > と定義されているため、もしかしたらundefされているかもしれません(未確認です)。 > > ※メイクファイルを追おうとしたのですが、_DEBUGを定義している所を別に見つけたので、 > そちらを先に確認しようと思います。 > > ■gb_COMPILERDEFSへの追加について > > ・gbuild.mkに以下の様なコードを見つけました。 > > (略) > gb_GLOBALDEFS := \ > -D_REENTRANT \ > -DOSL_DEBUG_LEVEL=$(gb_DEBUGLEVEL) \ > -DSUPD=$(UPD) \ > $(gb_OSDEFS) \ > $(gb_COMPILERDEFS) \ > $(gb_CPUDEFS) \ > > # This is used to detect whether LibreOffice is being built (as opposed to building > # 3rd-party code). Used for tag deprecation for API we want to > # ensure is not used at all externally while we clean > # out our internal usage, for code in sal/ that should be used only internally, etc. > gb_GLOBALDEFS += \ > -DLIBO_INTERNAL_ONLY \ > > ifeq ($(gb_ENABLE_DBGUTIL),$(true)) > gb_GLOBALDEFS += -DDBG_UTIL \ > > ifneq ($(COM),MSC) > gb_GLOBALDEFS += -D_DEBUG \ > > endif > endif > (以下略) > > ※多分ifneq ($(COM),MSC)ではなくifeq ($(COM),MSC)が正しいと思われるため、 > ここを修正してビルドしてみます。 > > 以上です。 > > > 2013年8月4日 15:05 山田太郎 <free.toolcrea...@gmail.com>: > > > > > 茂木さん、いつも詳細なご回答ありがとうございます。 > > > > ■--enable-dbgutilについて > > > > ・ChangeLogに「--enable-dbgutil doesn't cause -D_DEBUG any more」と記載されていました。 > > 英語はよくわからないので解釈間違ってるかもしれませんが、恐らく--enable-dbgutilを使用 > > しても -D_DEBUGは有効にならない様ですね。 > > > > ■環境変数CPPFLAGSについて > > > > ・autogen.shのオプションに環境変数が渡せた事を忘れていました。以下の設定で、現在ビルドを > > 行なっています。結果は後ほどご報告させて頂きます。 > > > > > > ◆autogen.shに渡したパラメータ(autogen.lastrun) > > --disable-activex > > --disable-atl > > --with-nss-build-tools=/cygdrive/c/mozilla-build > > --with-ant-home=D:\apache-ant-1.9.0 > > --without-junit > > --with-cl-home=C:\PROGRA~2\MICROS~2.0\VC > > --without-help > > --without-myspell-dicts > > --enable-debug > > --with-lang=en-US ja > > CPPFLAGS=-D_DEBUG > > > > ■外部の依存ライブラリへの影響について > > > > ・「外部の依存ライブラリ」がExternalモジュールを指しているとしてご回答させて頂きます。 > > 各Externalモジュールのメイクファイル(ExternalProject_モジュール名.mk)は以下の様に > > なっています。 > > ifeq ($(VCVER),110) > > (中略) > > && MAKEFLAGS= MSBuild.exe ソリューションファイル名またはvcxprojファイル名 > > /t:Build /p:Configuration=Release /p:PlatformToolset=v110 \ > > (以下略) > > つまり常にReleaseモードでビルドされます。 > > 全てDebugモードでビルドしたい所ですが、とりあえずExternalモジュールはRelease > > モードのままでビルドしています。 > > ※ /p:Configuration=Debugにすると、さらにMakefileの修正 > > (例えばpython3モジュールの場合、ExternalPackage_python3.mkのライブラリ名やlib名 > > に_dを付加する必要あり) > > が必要となりますし、過去に試してみたのですが、Externalモジュールがビルドに失敗して > > しまいます(例えばpython3モジュールの場合LO_lib/python3_d.dllやLO_lib/python3_d.libが > > 無いため失敗します)。 > > > > 影響が有るか無いかについては、後ほどご報告させて頂きます。 > > > > ■gb_COMPILERDEFSへの追加について > > > > ・こちらも後でトライしてみます。 > > > > ■メモリリークチェック方法について > > > > ・教えて頂いたURLに記載の内容を1つずつ試してみます。 > > ※結果報告に時間が掛かるかもしれませんがご容赦願います。 > > > > ■wineの使用について > > > > ・こちらも後でトライしてみます。現在LibreOfficeのカスタマイズ案件の対応中なのですが > > wineでの検証結果でクライアント様が納得するか不安なので、最終手段として検証 > > してみます。 > > > > 以上です。 > > > > > > > > > > 2013年8月3日 22:39 Isamu Mogi <wiz.satur...@gmail.com>: > > > > > > > > 茂木です。 > > > > > > > ■不明点1 > > > > > > 環境変数CPPFLAGSに当該マクロを書いて、configureし直しでできます。ただ、 > > > 確認はしていませんが外部の依存ライブラリまで影響がいきそうな気がします。 > > > それが嫌な場合はsolenv/gbuild/platform/com_MSC_defs.mkの40行目付近 > > > gb_COMPILERDEFSに手動で追加するのが良いと思います。自動で付加する機能が > > > みつかればそっちが良いのですが、僕は見つけられなかったです。 > > > > > > > ■不明点2 > > > > > > ここで聞くよりstackoverflowを見るほうがよさそうです。 > > > http://stackoverflow.com/questions/413477/is-there-a-good-valgrind-substitute-for-windows > > > > > > valgrindが得意なら、下記コマンドを使うのが良いと思います。 > > > > > > valgrind --trace-children=yes wine soffice.exe > > > > > > > > > (2013/08/02 17:14), 山田太郎 wrote: > > > > お世話になっております。 > > > > > > > > 不明点が2点あり、ご存知の方はご回答をお願い致します。 > > > > > > > > ■不明点1 > > > > ・メモリリークを検出するために、下記の「ビルド環境」に記載の環境で日本語版LibreOffice4.0.3.3を > > > > ビルドしたのですが、_DEBUGが有効になっていない様です。 > > > > どなたか解決方法をご存知の方いらっしゃいますでしょうか? > > > > ※この不明点の質問意図はmsvcrtd.dllを使用したメモリリークチェックを実施する際に_DEBUGが > > > > 有効である必要があるために質問させて頂いております。 > > > > > > > > ■不明点2 > > > > ・Windows環境で、LibreOfficeのメモリリークを検出する方法(どの行でnewまたはmalloc()した > > > > メモリが解放されていないかを知る方法)をご存知の方いらっしゃいましたら > > > > ご回答をお願い致します。 > > > > ※Linux環境であればvalgrindで検出出来るのですが、valgrindはcygwinに対応して > > > > おりません。 > > > > ※WinDbgやApplication Verifier、パフォーマンスモニター、Performance Analyzer、 > > > > Xperf等も試してみたのですが、使い方に問題があるせいなのか不明ですが > > > > リークを検出できませんでした。 > > > > > > > > ■ソースファイル > > > > http://ja.libreoffice.org/download/?type=src&version=4.0.3からダウンロードした > > > > バージョン4.0.3.3ソースファイル > > > > > > > > ■ビルド環境 > > > > OS:Windows7(64bit) > > > > Cygwin:1.7.18(0.263/5/3) > > > > コンパイラ:Visual Studio 2012 Express for Desktop > > > > make:LOパッチが当てられたGNU make 3.82 > > > > http://dev-www.libreoffice.org/bin/cygwin/make > > > > > > > > ■autogen.shに渡したパラメータ(autogen.lastrun) > > > > --disable-activex > > > > --disable-atl > > > > --with-nss-build-tools=/cygdrive/c/mozilla-build > > > > --with-ant-home=D:\apache-ant-1.9.0 > > > > --without-junit > > > > --with-cl-home=C:\PROGRA~2\MICROS~2.0\VC > > > > --without-help > > > > --without-myspell-dicts > > > > --enable-debug > > > > --enable-dbgutil ←これが有効な場合、_DEBUGが有効になると考えていたのですが、だめでした。 > > > > --with-lang=en-US ja > > > > > > > > > > > > 以上、宜しくお願い致します。 > > > > > > > -- Unsubscribe instructions: E-mail to discuss+unsubscr...@ja.libreoffice.org Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette List archive: http://listarchives.libreoffice.org/ja/discuss/ All messages sent to this list will be publicly archived and cannot be deleted