2012-06-27 44 views
11

我想在我的应用程序中使用OutputDebugString(),然后在应用程序部署到现场时可以选择在单独的查看器中显示它。如何查看OutputDebugString的输出?

也就是说,我不想更改标志并重建我的.exe来打开和关闭调试。

谷歌搜索,似乎DebugView应该处理,但它也没有TraceTool显示此代码的任何输出。

unit Unit1; 

interface 

uses 
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; 

type 
    TForm1 = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 


procedure TForm1.FormCreate(Sender: TObject); 
begin 
    OutputDebugString(PChar('Hello, wurld')); 
end; 

end. 

我已阅读文档,无济于事,看到其他人也有类似的问题,但还没有发布解决方案。

有没有解决方案?

+3

[GExperts](http://gexperts.org)有一个调试查看器和一个添加到您的应用的单元,即使在XE2启动器中也会为您执行此操作。请参阅它包含的'DebugIntf'单元和'GExpertsDebugWindow.exe'应用程序。这些工作在XE2 Starter(以及几乎所有其他版本的Delphi)下工作。 –

+0

+1我会检查出http://www.gexperts.org/tour/index.html?debug_window.html – Mawg

+0

如果你张贴的答案,我可能会奖励它,尽管来自@RRUZ的英镑帮助这是我将与之合作的解决方案 - FOR EXE2 STARTER版本。它似乎是在IDE内外共同工作的唯一解决方案。对于其他版本,我可能更喜欢TraceToool的更多版本,但Gexperts看起来比我的需求更好。 – Mawg

回答

9

GExperts has a调试查看器以及添加到应用程序中的单元,即使在XE2 Starter中也会为您执行此操作。请参阅DebugIntf单元以及它包含的GExpertsDebugWindow.exe应用程序。这些工作在XE2 Starter(以及几乎所有其他版本的Delphi)下工作。

GExperts还包括很多其他的IDE和编辑器增强功能,这些增强功能非常棒,当然它们也一直存在,所以它们是非常稳定的工具。

+0

它不能在从未安装Delphi的PC上运行(无法找到RTL60.BPL)。我已经发布到GExperts邮件列表,但是那么mfar没有回复。 – Mawg

+0

它是用运行时软件包构建的。如果您给出的BPL版本号不是错字(我认为它应该是160,而不是60),那么您已经安装了一个很早的版本(60是在Delphi 6,IIRC附近)。如果它是160,您可以在您的Windows \ System32文件夹中找到该文件夹​​,并将其放在与您将调试查看器可执行文件放在同一个文件夹中。它是Delphi的可分发运行时库之一,因此您可以随应用程序一起发货。你也需要VCL160和VCLX160。 –

+1

哎呀,它确实是160,而不是60.我已经复制了BPL,但不知道要复制其他两个。这很好。谢谢你一如既往的为你的出色的帮助。 – Mawg

23

DebugView工具正常工作;只能确保直接启动你的应用程序(没有附加Delphi IDE或其他调试器)。

无论如何,查看Delphi应用程序的OutputDebugString输出的自然方法是使用Delphi IDE和Event Log窗口。

Enter image description here

Enter image description here

+1

+1您能确认XE2入门版没有事件日志查看器吗? http://www.embarcadero.com/products/delphi/delphi-feature-matrix似乎表明如此。据推测,那么,我无法查看来自IDE的输出,但只有当我单独运行时才能看到输出结果。 – Mawg

+4

我不敢相信'Event Log' Windows不属于Delphi Starter版本的一部分:( – RRUZ

+1

但是它在matix特性中看起来如此,对吗?我在菜单上找不到它... – Mawg

5

专家包包含一个工具,CnDebugViewer.exe,它可以捕获OutputDebugString的(应该在Windows 7  可以以管理员身份运行)。

不像DbgView,CnDebugViewer可以为不同的应用程序创建单独的选项卡。

CnPack包含一个单元CnDebug.pas。使用此单元,您可以跟踪类型化对象,集合,异常,memdump等。使用CnDebug.pas,您还可以设置是否自动启动CnDebugViewer,在发送调试消息时是否转储到文件等。

+1

+1更多信息在http://www.cnpack.org/showdetail.php?id=715&lang=en – Mawg

+0

@shenloqi,嗯...任何人都验证了源代码是***干净***?我通常不相信来自中国的这类工具。 – Pacerier

4

使用OutputDebugString的一个问题是其他程序也可能正在使用它,使您的日志混乱:Debugging OutputDebugString calls in Delphi

您可以使用CodeSite Express,我们在日常使用中非常满意:http://www.raize.com/devtools/codesite/Default.asp

+1

这只是一个问题,如果您使用的工具有意收集来自其他程序的消息,然后提供无法过滤它们的方法。普通的旧调试器不会有这个问题,因为'OutputDebugString'通常只发送消息给调试它的单个程序。SysInternals工具使用不同的非标准技术收集消息,而不必成为所有进程的调试器。但它也允许过滤。所以根本没有问题。 –

+1

代码网站似乎不是免费的:-( – Mawg

+0

CS Express包含在XE2和XE3中,我一直在使用完整版本多年;优秀的工具,比乍一看更有用。 – casterle

2

在我的版本XE5的,我不得不启用在“输出消息”选项:

工具>选项>调试器选项>事件日志

我不记得禁用它。