12

我想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.

我已阅读文档,但无济于事,并且看到其他人也遇到过类似的问题,但尚未发布解决方案。

有解决办法吗?

4

5 回答 5

27

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

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

在此处输入图像描述

在此处输入图像描述

于 2012-06-27T02:16:34.217 回答
9

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

GExperts 还包括大量其他很棒的 IDE 和编辑器增强功能,当然它们一直存在,因此它们是非常可靠的工具。

于 2012-06-27T11:00:12.010 回答
5

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

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

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

于 2012-06-27T06:11:36.473 回答
4

使用 OutputDebugString 的一个问题是其他程序也可能在使用它,从而使您的日志变得混乱:在 Delphi 中调试 OutputDebugString 调用

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

于 2012-06-27T12:23:06.127 回答
2

在我的 XE5 版本中,我必须在以下位置启用“输出消息”选项:

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

我不记得禁用它。

于 2014-07-11T22:11:36.980 回答