这种情况在我身上发生过不止一次,导致我浪费了很多时间去追逐一个幽灵。通常情况下,当我调试一些非常困难的与时间相关的代码时,我会添加大量的OutputDebugString()调用,以便能够清楚地了解相关操作的顺序。问题是,Delphi 6 IDE似乎只能处理那么长时间的情况。为了避免一般性(尽可能),我将使用我刚经历的一个具体例子。
我花了几天时间调试我的线程间信号量锁定代码以及我的DirectShow时间戳计算代码,这些都导致了一些非常令人沮丧的问题。在排除了我能想到的每一个错误之后,我仍然有一个Skype的问题,我的应用程序向其发送音频。
大约在10秒钟之后,我说话并听到自己的声音从我用于测试的第二台PC上的Skype中传出来的延迟开始增加。在20-30秒左右,延迟开始呈指数增长,并触发了我检查是否持有关键部分的代码。
幸运的是,当时并不太晚,因为之前经历过这种情况,我决定停止不断地追踪,并关闭了大部分的OutputDebugString()。幸好,我大多数都包裹在条件编译定义中,所以很容易做到。我一旦这样做,问题就消失了,结果证明我的代码是正常工作的。
看起来Delphi 6 IDE在OutputDebugstring()流量超过某个阈值时会变得非常缓慢。也许只是添加字符串到事件日志调试器窗格的任务,该窗格保存所有OutputDebugString()报告。我不知道,但当TMemo或类似控件开始包含太多字符串时,我也遇到过类似的问题。
你们中间有什么方法可以防止这种情况发生吗?是否有一种通过某种方法调用清除事件日志或至少限制其大小的方式?此外,你使用什么技术,如条件定义、IDE插件或其他方式来应对这种情况?
我花了几天时间调试我的线程间信号量锁定代码以及我的DirectShow时间戳计算代码,这些都导致了一些非常令人沮丧的问题。在排除了我能想到的每一个错误之后,我仍然有一个Skype的问题,我的应用程序向其发送音频。
大约在10秒钟之后,我说话并听到自己的声音从我用于测试的第二台PC上的Skype中传出来的延迟开始增加。在20-30秒左右,延迟开始呈指数增长,并触发了我检查是否持有关键部分的代码。
幸运的是,当时并不太晚,因为之前经历过这种情况,我决定停止不断地追踪,并关闭了大部分的OutputDebugString()。幸好,我大多数都包裹在条件编译定义中,所以很容易做到。我一旦这样做,问题就消失了,结果证明我的代码是正常工作的。
看起来Delphi 6 IDE在OutputDebugstring()流量超过某个阈值时会变得非常缓慢。也许只是添加字符串到事件日志调试器窗格的任务,该窗格保存所有OutputDebugString()报告。我不知道,但当TMemo或类似控件开始包含太多字符串时,我也遇到过类似的问题。
你们中间有什么方法可以防止这种情况发生吗?是否有一种通过某种方法调用清除事件日志或至少限制其大小的方式?此外,你使用什么技术,如条件定义、IDE插件或其他方式来应对这种情况?