4

从另一个关于 Delphi IDE 中的错误的问题的答案开始,有谁知道是否有办法改进 IDE 的多线程调试功能,或者如果没有,至少为什么有时它会如此糟糕?

当您在一个程序中有多个线程时,使用 F7 或 F8 单步执行代码通常会导致很长时间的停顿,或者整个 IDE 只是锁定。当您离开或进入方法或程序时,这一点尤其明显。调试器似乎总是适合单线程应用程序。

PS。我使用的版本是2007

4

5 回答 5

3

根据我的经验,多线程调试使用 Vista 和 Delphi 2009 比 XP 和 Delphi 2007 好得多。

首先,ide明显更稳定。

其次,在Vista 上的Delphi 2009 中,调试器可以向您显示发生死锁的位置。

如果您必须使用 Delphi 2007,我强烈建议您尽可能在单线程单元测试中调试您的代码,然后在主程序中使用您现在测试过的代码。;)

于 2009-02-05T09:22:22.190 回答
2

当应用程序本身没有死锁时,试着非常清楚你在哪个线程中。在调试器中保持线程列表,并考虑使用命名线程。

有时不可能交互式地调试本身死锁的应用程序。发生这种情况时,您可以使用 WinDbg 和 Adplus 等工具来处理内存转储。是的,这比使用交互式调试器要困难得多,但它胜过完全没有调试器。Tess Ferrandez 的博客上有示例应用程序、演示和说明。我将从这个页面开始。实验室以 .NET 为中心,但不要让这让您望而却步;想法是一样的。

于 2009-02-05T13:38:22.563 回答
1

当我想调试多线程操作时,我经常使用日志文件(在应用程序运行后进行分析)而不是交互式调试器。

例如使用函数“OutputDebugString”。输出来自 Delphi 的事件日志。如果你在 Delphi 之外启动你的程序,你可以使用SysInternals 的 DebugView来显示日志。注意将线程 ID 添加到每个输出 (GetCurrentThreadID)。请注意,在写入日志之前可能会有线程切换。但是在多个线程交互的地方,您可能会有一个关键会话(或另一个同步对象),因此它应该是一个问题。

于 2009-02-06T14:12:18.343 回答
0

是的,调试多线程应用程序很麻烦。因为您不断地从一个线程交换到另一个线程。

于 2009-02-05T08:41:40.103 回答
0

另一个我从未尝试过的想法,因为我刚刚考虑过:如果您对调试一个线程感兴趣并且只想避免被其他线程干扰,则可以暂时挂起一些线程。

SysInternals 的 Process Explorer提供了暂停和恢复线程的可能性(在进程属性中称为“线程”的选项卡中)。但正如我所说,直到现在我才测试过它。

于 2009-02-06T14:18:34.477 回答