gpt4 book ai didi

Delphi - 用于跟踪传播的访问违规的工具/技术

转载 作者:行者123 更新时间:2023-12-03 15:04:01 27 4
gpt4 key购买 nike

即使听起来很奇怪,我相信每个人在处理具有大量自定义组件的大型应用程序时都遇到过此类问题。某个地方生成了 AV,但应用程序仍在继续执行,稍后会出现错误。我不是在谈论多线程应用程序。只是关于通用的单线程应用程序。

我正在努力寻找随机引发的错误,即使我正在使用 MadExcept/AQT、调试 dcus 和断点,但我无法找到引发该错误的确切步骤以及从何处引发该错误。错误正在传播,有时在 TWinControl 销毁(Delphi 标准 TPageControl)上引发错误,有时在打开数据集(之前使用相同的 SQL 打开和关闭多次)时引发错误。因此堆栈被损坏,在这种情况下我无法使用它。

我知道这个问题太过本地化,但我想问您还有哪些其他替代方法可以跟踪此类错误。

最佳答案

我首先会使用其他一些内存管理器,看看是否可以强制应用程序的使用模式更快地被打破。

FastMM可以使用 FullDebugMode 运行(请确保将相应的 DLL 与您的应用程序 EXE 放在一起)。它可以做一些重要的事情:

  • 用模式填充内存(例如 Arioch 'The 建议)
  • 检查 block 被释放后是否有修改
  • 记录应用程序终止时的内存泄漏
  • 对某些事件进行回调,以便您可以记录内容

过去我写过 2 篇关于 FastMM 的博客文章,我知道我应该写更多关于它和其他内存管理器的文章。

编辑:关于其他内存管理器的好文章Memory Manager Investigations由 SO 用户 Eric Grange .

出于文档目的,一些其他内存管理器(其中大多数不适用于您的情况,但我还没有找到包含所有这些的帖子):

在多线程环境中,这些可能会很好:

在 EXE/DLL 设置中,您可能想尝试 FastShareMem .

在他的ScaleMM repository中,André Mussche 做到了 test quite a few other memory managers .

注意:+1;好问题,我应该找一些时间写一篇关于 Delphi 内存管理器的后续博客文章(:

关于Delphi - 用于跟踪传播的访问违规的工具/技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17164155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com