我们的应用程序是在 PowerBuilder 中开发的。我们在该应用程序中面临内存泄漏问题。是否有任何工具或技术来查找内存泄漏?
问问题
2048 次
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 Monitor和Process Hacker等工具也可以通过列出应用程序拥有的句柄(文件、GDI 资源……)来提供帮助
在 PB 方面,一种解决方案可能是在调试模式下运行应用程序并启用即时调试,并添加一种调用方式(窗口上的临时按钮)DebugBreak()
:在调试器视图中,您可以查看Objects in memory
可以显示是否存在可疑数量的对象的视图,但它只能提供线索,不能说明它们是在哪里创建的或它们为什么在那里。
于 2013-05-29T08:10:09.127 回答