2010-06-25 111 views
4

我想知道是否可以绕过OutputDebugString?我希望OutputDebugString输出显示在DebugView中,而不是在内部的Delphi事件查看器窗口中。但我找不到一种方法告诉Delphi不要吞下OutputDebugString。有任何想法吗?在Delphi 7中绕过OutputDebugString?

关于

+2

它应该显示在Delphi窗口中_和_ Debug_中。你能证实这种情况吗? – 2010-06-25 06:45:58

+2

我也有Delphi 7,它不在DebugView中显示,只在Delphi事件日志中显示。 – 2010-06-25 06:49:35

+2

它只在Delphi事件日志中显示它是否在调试会话中运行。如果应用程序在没有连接调试器的情况下启动,OutputDebugString被DebugView捕获。 – pantarhei 2010-06-25 06:55:06

回答

0

禁用事件日志属性中的“输出消息”不起作用?

+0

是的。它不起作用。 – splash 2010-06-25 07:01:51

+1

结果是消息未显示在内部事件日志中。但它们仍然被调试器吞噬。 – pantarhei 2010-06-25 07:07:41

+0

我担心一旦调试器连接到进程就会将输出发送到该调试器。 – 2010-06-25 09:30:21

1

我想这是没有办法的。 德尔福2009的情况仍然如此。您应该提交功能请求:http://qc.embarcadero.com

我想知道是什么优势,而不是Delphi的内部事件日志窗口应该是?

+0

的好处是您可以在DebugView中过滤调试字符串。让生活变得更轻松。 – pantarhei 2010-06-25 07:06:32

+0

你真的需要比Delphi中的on/off过滤器更多吗? ;-) – splash 2010-06-25 07:08:20

+0

提交D7的功能请求?你在跟我开玩笑吗?我很确定,如果D09目前不可能,他们不会添加D7。 – pantarhei 2010-06-25 08:33:17

3

这是不可能的。

OutputDebugString将字符串发送到调试器(顾名思义)。每个进程只能有一个活动调试器。你在Delphi下运行你的应用程序 - Delphi从调试器那里得到了消息。在Delphi之外运行应用程序 - DebugView可以访问它们,因为没有调试器声明它。

但是:为什么你需要这个吗?只需在Delphi事件日志中禁用其他类型的事件 - 您将获得与DebugView相同的功能。

+1

我知道输出被发送到调试器。我的问题是如何绕过它。但看起来没有办法绕过它。如果我禁用其他类型,我不会获得相同的功能。我仍然收到数百条调试消息。在DebugView中,我可以过滤输出,因此我只会看到我目前感兴趣的内容。这有很大的不同。 – pantarhei 2010-06-25 08:30:45

+1

@pantharhei:在这里看看http://d-fens.net/?idMenu=3&idSub=8&idPage=1&uLinkPages=1&uToc=0,在我看来,这应该是可能的。根据请求,作者可以提供重定向的源代码。 – 2010-06-25 09:25:38

+0

@Lieven:看起来很有趣。如果时间压力消失,我们将仔细观察。它会永远消失吗? ;) – pantarhei 2010-06-25 09:42:19

0

不是我原来问的问题,我意识到,但值得看看来自Raize Software的CodeSite。它使OutputDebugString达到一个全新的水平。消息(可以)被定向到CodeSite查看器,这大致相当于高度灵活的DebugView。很值得每一分钱恕我直言。

+0

当然。但订购或引入这些工具并不是我的责任。我也看过SmartInspect。肯定会很高兴。但目前还没有。 – pantarhei 2010-06-25 09:40:34

+0

相反,Pantarhei,每个人都有责任向同行介绍有用的工具。 – 2010-06-25 12:15:07

+0

好的。用错了词。所以我已经介绍了这些工具。但我不能决定是否购买并集成到现有的工具中。 – pantarhei 2010-06-25 14:02:18

1

代替DebugView,您可以尝试使用Process Monitor及其新的“调试输出”功能。它不使用OutputDebugString,它使用自己的API,还有一个Delphi包装器here。您可以使用Process Monitor过滤功能,Delphi不会捕获该消息 - 但它不像OutputDebugString那样具有通用功能。

+0

可以将它用于我自己的本地测试。但我认为我不会将其纳入代码库。但我会看看它。谢谢。 – pantarhei 2010-06-25 14:41:34