这不止一次发生在我身上,并导致许多时间浪费在追赶幽灵上。通常,当我调试一些非常困难的与时序相关的代码时,我开始添加大量的OutputDebugString()调用,这样我就可以很好地了解相关操作的顺序。问题是,Delphi 6 IDE似乎只能处理这种情况这么长时间。我将使用一个具体示例来避免普遍性(尽可能)。
我花了几天时间调试线程间信号量锁定代码以及DirectShow时间戳计算代码,这些代码导致了一些令人沮丧的问题。消除了所有我能想到的错误之后,我的Skype仍然有问题,我的应用程序将音频发送到该问题。
大约10秒钟后,通话和通话之间的延迟开始增大,这是我用于测试的第二台PC上的Skype发出的声音。在大约20到30秒时,延迟开始以指数方式增长,然后触发了代码,我检查了关键部分的保持时间是否太长。
幸运的是,在晚上还不算太晚,在此之前,我决定停止不懈地跟踪并关闭大部分OutputDebugString()。值得庆幸的是,我将它们中的大多数包裹在条件编译器定义中,因此很容易做到。我这样做的那一刻,问题就消失了,事实证明我的代码运行良好。
因此,当OutputDebugstring()流量超过某个阈值时,Delphi 6 IDE似乎开始陷入困境。也许这只是将字符串添加到“事件日志”调试器 Pane 的任务,该 Pane 包含所有OutputDebugString()报告。我不知道,但是当TMemo或类似控件开始包含太多字符串时,我在应用程序中遇到了类似问题。
你们中的那些人为防止这种情况做了什么?是否有通过某种方法调用清除事件日志的方法,或者至少有一种限制其大小的方法?另外,通过条件定义,IDE插件或其他方法使用什么技术来应对这种情况?
最佳答案
我之前在Delphi 2007中也遇到过类似的问题。在IDE中禁用事件查看功能,而是使用DebugView中的Sysinternals。