DebugHook 与 ReportMemoryLeaksOnShutdown 都是 System 下的变量.
DebugHook: 程序中母体中运行时, 此值是 1; 独立运行时, 它是 0.
在程序的任何地方加上一句 ReportMemoryLeaksOnShutdown := True;
这样程序在关闭时可检测是否有内存泄漏.
如果这样使用: ReportMemoryLeaksOnShutdown := Boolean(DebugHook);
则程序只会在调试时报内存泄漏.
ReportMemoryLeaksOnShutdown
放置ReportMemoryLeaksOnShutdown的最佳位置是程序的dpr文件中,例如:
begin ReportMemoryLeaksOnShutdown := DebugHook <> 0; //source "by" Delphi Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TMainForm, MainForm) ; Application.Run; end.
使用全局变量DebugHook的作用是确保程序在debug模式运行时显示内存泄露报告。但是注意在正常模式运行是不会报错的。
Test Drive: Memory Leak Detection
var sl : TStringList; begin sl := TStringList.Create; sl.Add('Memory leak!') ; end;
上述代码就是实际测试内存泄露报告效果。
避免这种内存泄露的发生就是使用free方法,用nil不能释放内存。
--------------------------------------------------------------------------------------------------------------------
最终我总结用和上面的方法结合:
begin {还更容易理解,加在程序的工程处,不用每个单元都引用了} ReportMemoryLeaksOnShutdown := Boolean(DebugHook); Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end.
补充:用了上面的代码之后,调试程序出来一个警告
本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/archive/2013/04/22/3034963.html
分类:
调试Debug
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人