Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


お世話になっております。

■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.toolcreator@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.toolcreator@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.saturday@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+unsubscribe@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

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.