0

我们的应用程序是在 PowerBuilder 中开发的。我们在该应用程序中面临内存泄漏问题。是否有任何工具或技术来查找内存泄漏?

4

2 回答 2

0

曾经有一个实用程序(Brian Dick 的 CDMatch)可以打开 PowerBuilder 分析文件(使用 PowerScript 函数),识别已被垃圾收集的对象,获取它们唯一的对象 ID,并在跟踪中找到每个对象的实例化。查找已创建和未显式销毁的对象是您可以在 PowerScript 中控制的内存泄漏类型。几年前,这个工具所在的网站就黑了。

我通常发现惰性编程只是假设垃圾收集会及时处理清理,但随后函数或事件被用于一个大循环中,在所有垃圾堆积导致问题之前不允许清理.

这样你就可以:

  • 如上所述尝试推出自己的分析工具
  • 在战略性的地方加入显式的 GarbageCollect(),看看这是否“解决”了你的问题
    • 如果确实如此,请以此为起点来追踪您的问题,并明确销毁实例或重新使用现有实例;它总是会表现得更好)

祝你好运,

特里。

于 2013-05-29T14:42:47.613 回答
-1

几种工具可能有助于查明内存泄漏,但没有一个专门用于 PB

  • DPus Light(很有前途的工具,但不幸的是自 2011 年以来没有发展)专注于 GDI 和内存泄漏
  • Visual Leak Detector以 VC++ 为目标,因此可以帮助 PBNI 扩展(并且可以用于 PB 本身,因为它是用 VC++ 编译的,但是......)
  • Sys Internals Process MonitorProcess Hacker等工具也可以通过列出应用程序拥有的句柄(文件、GDI 资源……)来提供帮助

在 PB 方面,一种解决方案可能是在调试模式下运行应用程序并启用即时调试,并添加一种调用方式(窗口上的临时按钮)DebugBreak():在调试器视图中,您可以查看Objects in memory可以显示是否存在可疑数量的对象的视图,但它只能提供线索,不能说明它们是在哪里创建的或它们为什么在那里。

于 2013-05-29T08:10:09.127 回答