一项老工程落在我手里。它有130000行非常糟糕的代码(没有尝试/最后吞没了所有异常,有数千个全局变量)。我预计会有成千上万的内存泄漏。但是,FastMM4在关机时没有显示任何信息。没有消息框,没有txt日志文件。
对于所有其他项目,我使用相同的FastMM设置(inc),它可以工作。因此,我并不是说FastMM (或它的设置)被破坏了。我觉得处理不了这么多的泄密。我的一个朋友告诉我,在一个也有很多漏洞的大型项目上,需要5-10分钟才能生成txt日志。
核查:
有什么关于如何获取日志的建议吗?
{$define UseCustomFixedSizeMoveRoutines}
{$define UseCustomVariableSizeMoveRoutines}
{$define NoDebugInfo}
{$define ASMVersion}
{$define CheckHeapForCorruption}
{$define DetectMMOperationsAfterUninstall}
{$define FullDebugMode}
{$define RawStackTraces}
{$define LogErrorsToFile}
{$define LogMemoryLeakDetailToFile}
{$define ClearLogFileOnStartup}
{$define LoadDebugDLLDynamically}
{$define AlwaysAllocateTopDown}
{$define SuppressFreeMemErrorsInsideException}
{$define EnableMemoryLeakReporting}
{$define HideExpectedLeaksRegisteredByPointer}
{$define RequireDebuggerPresenceForLeakReporting}
{$define EnableMemoryLeakReportingUsesQualifiedClassName}
{$define EnableMMX}
{$define ForceMMX}


发布于 2022-08-23 06:17:34
我找到了原因:编写代码的人使用KillTask来终止程序(后面是Application.Terminate)。
我删除了密码。现在,FastMM生成日志文件,它是12 is!我得把它们修好。我真幸运!
个人想法:当我得到解决方案时,我很难过,我想也许这不应该是StackOverflow的帖子。再想一想,这很好。我们今天学到了一些东西:如何而不是编写程序:)
此外,我们还了解到,有无数神奇的方式,一个疯狂的程序员可以打破一个程序,我们将花费数天来了解我们的疯狂方式。
(用我的语言来说,我们有句谚语:“当一个疯子把石头扔进湖里时,10个聪明的人找不到它”,这意味着做一些愚蠢的事情很容易,但很难修复。)
发布于 2022-08-18 19:13:21
我不明白你说的是哪些设置和ini文件。FastMM4选项由编译器条件( IIRC )驱动。
默认情况下不跟踪内存泄漏。
您需要在显式启用EnableMemoryLeakReporting条件下编译项目。
也可能是LogMemoryLeakDetailToFile和FullDebugMode条件词。在可执行文件夹中使用FastMM_FullDebugMode.dll和FastMM_FullDebugMode64.dll库,这取决于目标平台。
并在项目选项中将“映射文件生成”级别启用为“详细”,如果您想要堆栈跟踪的行号的话。
参见这篇文章和其他类似的参考资料。
https://stackoverflow.com/questions/73408092
复制相似问题