網頁

2010/12/15

BCB6 + FastMM4 搭配上應注意的地方

在網路上找了很久,總算是給我試出來了。

過程當中最麻煩的還是在FullDebugMode開啟後所帶來編譯問題,不是可編譯無效果,就是完全無法編譯。不論是參考對岸常用的4.78版,或是最新的4.97版,結果都是不正常的。

最後是參考這個網址:좀 황당한 이야기
(你沒看錯,真的是韓文)


裡面寫到相關的一些方法,可是我在4.78和4.97中並沒有找到相關行數,可是按照 Pro級 程式人員的第6感,我相信他是有成功使用的。

連行數都出來了,那找對應的版本來試試如何?
於是在不知道該作者使用的版本的情形下,去FastMM網站一個一個慢慢找。

最後才發現,原來是: FastMM4.94

只差一個小版本,我找了好久呀~~~~~!(應該從頭找回去的)

這個過程,我花了數個月的時間…

按照它的步驟:
1.將FaseMM4.pas, FastMM4Messages.pas, FastMM4Options.inc, FastMM4BCB.cpp, FastMM_FullDebugMode.dll, FastMM_FullDebugMode.lib複製到要使用FastMM4的專案目錄內
2.Project->Add to Project - "FastMM4Message.pas"
3.Project->Add to Project - "FastMM4.pas"
4.Project->Add to Project - "FastMM4BCB.cpp"
5.開啟FastMM4BCB.cpp,加入 #include <tchar.h>,存檔
6.修改FastMM4.pas,  1337行的 {$ifdef Delphi6AndUp}修改為 {.$ifdef Delphi6AndUp}
7.修改FastMM4.pas,  1343行的 {$endif}修改為 {.$endif}
以上是一定要做的步驟

第8項則是視需要而設定
8.修改FastMM4Option.inc 114行的 {.$define FullDebugMode} 修改為 {$define FullDebugMode}

第9項是非官方的安裝法
9. 開啟WinMain,加入FastMM4BCB.cpp並置頂,類似像:
    #include
    #pragma hdrstop
    //---------------------------------------------------------------------------
    USEOBJ("FastMM4BCB.cpp"); 

    USEFORM("Unit1.cpp", Form1);

第8項功能與FastMM_FullDebugMode.dll相依

開啟此功能後,所有會導致Memory Leak的項目都會記載到類似以下的檔名,並置於專案目錄中:
ProjectName_MemoryManager_EventLog.txt


此外,因為 VCL Framework本身就有些許Memory Leak,所以訊息會一直跳出來,可以在FastMM4Option.inc,將 EnableMemoryLeakReporting 項目關閉,如此一來,就不會每次編譯都會跳出嚇死人的錯誤訊息,但仍然會記錄在Log裡。如果要完全不看到的話,就必須再修改FastMM4.pas了。那又是另一個故事啦!

該作者在處理FastMM4Option.inc時覺得很麻煩,於是找了個很方便的工具來設定它
NEW: FastMM4 Options Interface


好累哦…

沒有留言:

張貼留言