问题标签 [leakcheck]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
548 浏览

delphi - TTaskBar 内存泄漏

Embarcadero 的 TTaskbar 存在内存泄漏。由于我在表单上删除了此控件,因此每次关闭应用程序时,FastMM 都会报告泄漏。

我尝试使用以下代码使 FastMM 静音:

但它不会工作。如何注册此泄漏?


内存块已泄漏。尺寸为:100

此块由线程 0xC64 分配,当时的堆栈跟踪(返回地址)为:406A52 409A7B 409CAC 4283A0

[System.SysUtils][System][System.SysUtils.FmtStr] 409CC6 40D775 7628A65F
[Unknown function at StretchDIBits] 7731594E
[RtlpNtMakeTemporaryKey 处的
未知函数] 7731594E [RtlpNtMakeTemporaryKey 处的未知函数] 773168F8
[RtlpNtMakeTemporaryKey 处的未知函数] 773168DC [RtlpNtMakeTemporaryKey 处的
未知函数]

该块当前用于类对象:UnicodeString
分配号为:2209

内存块已泄漏。尺寸为:36

该块由线程 0xC64 分配,当时的堆栈跟踪(返回地址)为:406A52 407D43 40846A 42CD40
[System.SysUtils][System][System.SysUtils.Exception.CreateFmt] 5DEDD7
[System.Win.TaskbarCore] [System.Win][System.Win.TaskbarCore.TTaskbarBase.UpdateTab] 610F00
[Vcl.Taskbar][Vcl][Vcl.Taskbar.CheckMDI] 5DF39F
[System.Win.TaskbarCore][System.Win][System.Win. TaskbarCore.TTaskbarBase.ApplyTabsChanges] 610DB8
[Vcl.Taskbar][Vcl][Vcl.Taskbar.TCustomTaskbar.Initialize] 5EB044
[Vcl.Forms][Vcl][Vcl.Forms.TApplication.Run] 62573A
[MinimalTemplate.dpr][MinimalTemplate ][最小模板.最小模板][26]

该块当前用于类对象:ETaskbarException
分配编号为:2207

此应用程序已泄漏内存。小块泄漏是(不包括指针注册的预期泄漏):

21 - 36 字节:ETaskbarException x 1
85 - 100 字节:UnicodeString x 1
[Vcl.Forms][Vcl][Vcl.Forms.TCustomForm.SetVisible] 5F5010

0 投票
1 回答
181 浏览

delphi - 如何强制 LeakCheck Delphi 库不收集数据?

我使用 Delphi 的 LeakCheck 库https://bitbucket.org/shadow_cs/delphi-leakcheck

我知道我可以使用这样的构造禁用泄漏报告:

但我还需要库在 RELEASE 模式下编译时不收集任何数据。

我可以像这样轻松地“破解” LeakCheck.pas 初始化/完成部分:

有没有更好的办法?我错过了条件定义还是全局属性?

0 投票
1 回答
94 浏览

delphi - 如何使用 LeakCheck 处理 DUnit 中的“错误”/预期内存?

为了消除所有内存泄漏,我试图将LeakCheck库合并到 DUnit 中。问题是 LeakCheck 会向我报告不是真正泄漏的内存泄漏。这些是由 RTL 分配并在程序退出时销毁的对象或其他东西。

LeakCheck 包含许多允许您指定要忽略的例程,我能够使用它们来忽略大多数此类“泄漏”。但是,我不知道如何特别摆脱一个:

创建实例TThread(最初是,TThread.CreateAnonymousThread但结果相同)会导致 64 字节的内存泄漏:

在其他情况下,LeakCheck 为我提供了该实例泄漏的类的名称,因此我可以将其添加到忽略列表中,但在这种情况下它没有。我怎样才能抑制这种“泄漏”?

附带说明一下,我遇到的这个和其他泄漏不会发生在 GUI 应用程序中。我猜,RTL 在测试运行之前会为这些对象中的大多数预先分配内存。