Delphi:发生意外的内存泄漏

2023-12-12

在 Delphi 中,我已配置为报告内存泄漏:

  {$IFDEF Debug}
  ReportMemoryLeaksOnShutdown := true;
  {$ENDIF}

After exiting the program I get the following message:
enter image description here

我的程序非常大,我不知道如何找到我创建但未释放的 TStringList。
不幸的是Delphi没有垃圾收集器......

如果我在我的项目中搜索TStringList我发现大约有 500 次出现。检查所有这些没有任何意义。

如何找到我忘记释放的变量?


以下软件有助于查找内存泄漏:
https://github.com/shadow-cs/delphi-leakcheck

以下是要遵循的步骤:

  1. cd C:\Delphi
    git clone https://github.com/shadow-cs/delphi-leakcheck
  2. 添加路径C:\Delphi\delphi-leakcheck\Source到您的 Delphi 库路径(工具/选项/...)
  3. 在你的开头添加以下代码MyProject.dpr file:

Code:

uses
  // LeakCheck, // Does not need do be defined here (LeakCheck.Report will do it) unless you want to reference it from the DPR
  LeakCheck.Report, // Me first! - I don't have any dependencies but LeakCheck so I finalize after all other units
  LeakCheck.Setup.Trace, // (Optional) Then me - Run setup to configure stack tracing for us
  LeakCheck.Report.FileLog, // Then me - I'm the one that pulls some dependencies and have all the functionality
  1. 编译并启动你的程序
  2. 定期退出程序
    退出可能需要长达几分钟(请耐心等待......)
  3. You will get a message box that tells you that a file C:\Delphi\MyProject\MyProject.log was created.
    This log file contains the name of the function (and its callstack) where the variable was created. It's not the name of the unfreed variable, but at least the function and line number inside this function.

    enter image description here

这种方法在几分钟内解决了我的问题。
奖励:该软件完全免费 - 您无需为其支付任何费用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi:发生意外的内存泄漏 的相关文章

  • 将 Context/Activity 实例保留在 RecyclerView.Adapter 中是否安全?

    给定一个这样的适配器 public class MyAdapter extends RecyclerView Adapter private final Activity mActivity private final List
  • 在 Swift 中,当使用“[weak self] in”时,当嵌套在另一个闭包中时我是否应该加倍它[重复]

    这个问题在这里已经有答案了 在 Swift 中 当使用 weak self in 当嵌套在另一个闭包中时 我应该将其加倍吗 Example override func viewDidLoad super viewDidLoad makeAP
  • 开源 Delphi 包可使用哪些项目选项?

    我写了一些 Delphi 代码 想在 GitHub 上分享 所有代码都根据需要包含在运行时和设计时包中 每个项目有许多项目选项需要设置 输出目录 搜索路径 编译选项等 我设法找到了一些适合我的情况的默认选项 但阅读此处的其他问答很明显有多个
  • 如何根据输入的内容过滤组合框的内容?

    我们有一个包含 100 多个项目的组合框 当我们在组合框中输入字符时 我们想要过滤掉项目 例如 如果我们输入 ac 并单击下拉选项 那么我们希望它仅显示以 ac 开头的项目 我怎样才能做到这一点 也许您会更喜欢使用操作系统内置的自动完成功能
  • 如何遍历任意给定集合中的枚举?

    我有很多枚举类型 它们与相应的集合相结合 例如 type TMyEnum meOne meTwo meThree TMyEnums set of TMyEnum 我正在尝试提出一组可以运行的函数any枚举集 而不是为每个枚举编写单独的函数
  • WPF 元素宿主内存泄漏

    我在 Windows 窗体上使用元素主机时遇到奇怪的内存泄漏 我有一个主窗体 它打开另一个窗体 该窗体上只有 elementhost 控件 此时 它没有 wpf 控件子控件 只能打开 1 个主机表单 每次我打开窗体时 应用程序内存都会增加2
  • 以编程方式重新启动 Delphi 应用程序

    应该不可能运行我的应用程序的多个实例 因此项目源码包含 CreateMutex nil False PChar ID if GetLastError ERROR ALREADY EXISTS then Halt 现在我想以编程方式重新启动我
  • 具有 csOwnerDrawFixed 样式的组合框如何表现得像 csDropDown 样式?

    我正在使用一个组合框 http docwiki embarcadero com Libraries en Vcl StdCtrls TComboBoxstyle 属性设置为的组件csOwnerDrawFixed 我实现了绘图项一切工作正常
  • Delphi 2009 IDE结构视图折叠功能

    现在有谁知道折叠 Delphi 2009 IDE 结构视图中的所有项目吗 我不知道折叠所有项目 这使我很难从视图中找到我的课程 Thanks 选择根节点 类 并按数字键盘上的 除号 那会让一切崩溃 然后按数字键盘上的 加号 键 第一级将展开
  • 石和磅的格式正确吗?

    我有一个图表 用于显示重量 以英石和磅 lbs 为单位 该图表由记录中的数据填充 对于权重 数据类型为 Double 记录数据是在运行时编辑的 我需要知道一种正确格式化输入数据的方法 为了更好地理解 首先看一下这些示例值 它们表示为石和磅
  • NodeJS:调用 global.gc() 不会将内存减少到最低限度?

    为了调查内存泄漏 我设置了一条触发的路线global gc 在每个POST gc app post gc function req res global gc 但是 我注意到 如果我发送垃圾邮件此请求 每次都会越来越多地减少内存使用量 不应
  • PS幸存者空间几乎已满

    我看到我的应用程序的 PS 幸存者空间在大部分时间几乎已满 98 我不知道PS幸存者空间是什么 这是正常的吗 遇到这种情况应该怎么办 首先 参见例如这里 什么是幸存者空间 https stackoverflow com q 10695298
  • Delphi IDE导致CPU过热

    我正在使用 Delphi 7 但我已经尝试过 Delphi 2005 2010 版本 在所有这些新版本中 当 Delphi IDE 在屏幕上可见时 我的 CPU 利用率为 50 一个核心为 100 另一个核心为 宽松 当 IDE 最小化时
  • 无法分配内存:fork:无法创建新进程?

    我们的托管在aws 最近 我们的博客从wordpress to aws 我们遇到服务器响应时间明显延迟的情况 主要是在访问博客时 以下是来自error log file Wed Feb 25 06 10 10 2015 error 12 C
  • 如何将纹理传递给 DirectX 9 像素着色器?

    我有像素着色器 fxc exe tiles fs T ps 3 0 Fotiles fsc Fctiles fsl struct PSInput float4 Pos TEXCOORD0 float3 Normal TEXCOORD1 fl
  • EOutOfMemory 使用 Delphi 创建大型 XML

    我正在使用 Delphi 从关系数据库中的数据创建 XML 文档 它在小数据集上测试得很好 但是当我尝试将数据集的大小扩展到生产级别时 它最终在节点创建期间因 EOutOfMemory 异常而崩溃 我正在使用放在表单上的 TXMLDocum
  • aio.h aio_read() 和写入内存泄漏

    我正在尝试使用 C 异步读取和写入磁盘 使用 Ubuntu 10 04 中的 posix aio 库 遵循此处概述的说明 一体机教程 http www ibm com developerworks linux library l async
  • .showsPhysics 内存泄漏

    我最近花了 5 个小时尝试调试 Spritekit 应用程序中的内存泄漏 应用程序启动后 我注意到内存使用量略有上升 我花了 5 个小时中的 3 个小时挖掘参考资料 了解强与弱的关系ARC https developer apple com
  • 将delphi stringgrid导出到excel

    我正在尝试将数据从delphi 7 中的stringgrid 导出到microsoft excel 我一直在使用这段代码来做到这一点 objExcel TExcelApplication Create nil objExcel Visibl
  • TThread.resume 在 Delphi-2010 中已弃用,应该在什么地方使用?

    在我的多线程应用程序中 I use TThread 挂起 and TThread resume 自从将我的应用程序移至 Delphi 2010 后 我收到以下警告消息 DCC 警告 xxx pas 277 W1000 符号 Resume 已

随机推荐

  • 积分:积分可能发散

    我正在使用一些集成到循环中integrate我发现了一个我无法理解的错误 也无法摆脱 这是我可以提取的 MWE u min 0 06911363 u max 1 011011 m 0 06990648 s 0 001092265 integ
  • 将图像/图标添加到单选按钮[重复]

    这个问题在这里已经有答案了 我需要为单选按钮组中的每个单选按钮显示图像 我见过一些自定义单选按钮和单选按钮组的示例 但它们都不起作用 有人可以指出我正确的方向吗 正确的方向 是首先看看有哪些替代方案可以帮助用户实现其目标 而不是创建自定义控
  • 我怎样才能以更好的方式编写 if else 代码检查? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 这是编写 if else
  • 如何将 Fuseki 与 Jena TDB 结合使用

    我有一个问题问你 我有一个三重存储 Jena TDB 我读到可以为 本地存储的 RDF 数据 特别是 我在文献中看到 Fuseki 与 Jena TDB 一起使用 我以这种方式将文件 rdf 加载到 Jena TDB 中 public vo
  • 如何使用 printf 重复一个字符?

    我想做类似的事情printf count char 重复一个字符count times 完成此操作的正确格式字符串是什么 编辑 是的 很明显我可以打电话printf 循环 但这正是我想避免的 您可以使用以下技术 printf s 5 这将打
  • 使用多语音库在 Dialogflow 中为 VUI 配置重复意图

    我正在尝试将我的 VUI 配置为在 Dialogflow 出现提示时重复句子 小背景故事 我正在帮助开发一款针对老年人的社交机器人 因此重复句子是一个非常需要的功能 我刚刚开始这个项目 之前负责这个项目的开发人员已经去世了 无法联系到 而且
  • 使用 sap.m.DatePicker 仅选择年份

    我有个约会 它是 JSONModel 中的一个字符串 例如 2016 如下所示DateTimeInput
  • Cypher 查询查找具有 3 个关系的节点

    当我寻找 2 个关系时 我想出了如何编写此查询 但不确定如何向查询添加更多关系 假设您有一个读书俱乐部数据库 其中 读者 和 书籍 作为节点 book 节点具有 genre 属性 定义该书是小说 非小说 传记 参考书等 reader 节点和
  • 使用权限创建路由

    我正在尝试使用权限和条件重定向用户 但我不知道为什么我的重定向没有按我想要的方式工作 我创建了这些类型的路线 not auth
  • iPad 版 Three20

    我需要在我的 iPad 项目中使用 Three20 我想知道 iPhone 版本的 Three20 项目是否可以直接在 iPad 上使用 还是应该等待这个时间表完成 http two20 info timeline roadmap OS 3
  • Apache Camel - IBM MQ 集成

    我有一个 Apache Camel 版本 2 18 项目 它通过 IBM MQ 客户端将文件发送到我合作伙伴的 IBM MQ 服务器 然而 我的伙伴使用messageId作为文件名 因此 我们必须将特定的文件名设置为messageId 我的
  • 我收到 'int' 对象不可下标

    我是 python 新手 我首先尝试为我的项目实现代码 我的错误代码是 int 类型的对象没有 len 这是我的代码并添加了 str 来解决问题 xored value ord Mblocks i len Mblocks ord Cbloc
  • 使用 ORMLite 准备查询的 SQL 异常

    我正在使用 ORM ORMlite 并且所有调用都进展顺利 直到出现以下错误 线程 main 中的异常org h2 jdbc JdbcSQLException SQL语句中的语法错误 SELECT FROM STORIES WHERE TI
  • 如果使用 docker 部署,为什么 MERN 应用程序无法与后端通信?

    我使用 Docker 将 MERN 应用程序部署到数字海洋 Droplet 如果我运行我的docker compose yml文件本地在我的电脑上运行良好 我有 2 个容器 1 个后端 1 个前端 如果我尝试在 Droplet 上进行组合
  • JSONDecodeError:额外数据:第 1 行第 228 列(字符 227)

    我正在使用 Ipython 进行一些数据分析 我无法加载 JSON 文件 请帮我在 IPython 中加载这个 JSON 文件 我还想跳过第一行中的相同单词以使其成为干净的格式 我希望每条记录如下所示 station id 72 num b
  • 字符串到字典字数统计

    所以我在家庭作业问题上遇到了麻烦 编写一个函数 word counter input str 它接受字符串 input str 并返回一个字典 将 input str 中的单词映射到其出现次数 所以到目前为止我的代码是 def word c
  • 如何在 Rails 中的 Chartkicks 中显示数据计数以及百分比

    Using chartkicks用于显示图表 它仅显示百分比 我想显示数量 金额以及百分比 Chartkickgem 是上面的包装Google Charts 通过使用库选项 您可以指定在legend并设置其他配置选项 所以像这样 有关更多配
  • 尝试更改 Google 云端硬盘中文件的所有者

    我尝试更改云端硬盘中文档的所有权 但收到以下错误 很抱歉 服务器发生错误 请稍等一下 然后重试 第 12 行 文件 代码 function transferFiles var files DriveApp getFiles while fi
  • JNA 与 Fortran 假定大小的数组

    我有一个 Fortran 子例程 采用假定大小的数组 subroutine sub arr implicit none double precision arr end subroutine 我使用 JNA 从 Java 进行了本机调用 F
  • Delphi:发生意外的内存泄漏

    在 Delphi 中 我已配置为报告内存泄漏 IFDEF Debug ReportMemoryLeaksOnShutdown true ENDIF After exiting the program I get the following