我有一些FastMM誤報的問題。這一次泄漏出現在測試表單中。這與我描述的here非常相似。德爾福7,FastMM和DUnit GUITesting虛假內存泄漏測試失敗
我得到了一個表單和一些普通的舊VCL控件。第一次測試顯示泄漏事實上並不存在。第二次運行沒有泄漏。我搜索了所有的DUnit源代碼,但找不到原因來解決它。有人能幫助我嗎?
我不能運行測試兩次,因爲:1.它將運行在一個持續集成;一些測試真的需要一些時間,加倍不是明智的。
我檢查的DUNIT GUI的最後3個選項: - 報告內存泄漏類型的Shutdown - 故障的TestCase如果內存泄露 - 忽略設置/ TearDown中
下面是範例代碼內存泄漏:
// form
type
TForm2 = class(TForm)
button1: TButton;
end;
implementation
{$R *.dfm}
// test
type
TTest = class(TGUITestCase)
private
a: TForm2;
public
procedure SetUp; override;
procedure TearDown; override;
published
procedure Test;
end;
implementation
procedure TTest.Setup;
begin
a := TForm2.Create(nil);
end;
procedure TTest.TearDown;
begin
FreeAndNil(a);
end;
procedure TTest.Test;
begin
a.Show;
a.close;
end;
試圖重現memleak與您的示例代碼,但與最新的dunit和fastmm(德爾福7)我發現沒有泄漏。 fastmm報告文件中包含什麼內容?還可以嘗試在Project選項下設置Map文件的詳細信息,包括TD32調試信息,並選中Use Debug Dcu-s來獲取詳細報告。 – balazs
@balazs沒有生成報告。您能否指出您使用的DUnit和FastMM版本的鏈接?謝謝! –
當然,[dunit](http://dunit.sourceforge.net/)的最後一個版本在寫這篇評論的時候是9.3,[fastmm4](http://sourceforge.net/projects/fastmm/),版本4.9.9.1。在FastMM4Options.inc開關FullDebugMode('{$ define FullDebugMode}')上,並將'FastMM_FullDebugMode.dll'複製到exe文件旁邊。 – balazs