如何写入控制台窗口进行调试?

时间:2010-12-12 09:41:36

标签: delphi windows-console

我可以在VCL应用程序的控制台窗口中显示循环结果以进行调试吗?

4 个答案:

答案 0 :(得分:28)

在Windows中,输出调试信息的最简单方法是使用OutputDebugString(),然后使用能够接收该输出的应用程序。 Delphi IDE中的事件查看器本身能够接收该输入,或者您可以使用DebugView中的SysInternals应用程序在未安装IDE的系统上输出。 AFAIK,GExperts也有类似的工具。那是因为GUI应用程序默认情况下没有控制台在哪里写输出,否则你必须创建一个(参见Gerry的答案)。

OutputDebugString()的一个优点是,即使调用进入发布版本(或者如果故意留在那里),应用程序也可以正常工作,但要注意不要输出敏感信息,因为可以使用上述工具之一阅读它们。

您还可以创建一个临时表单(即使用备忘录控件)并在那里路由输出。

还有一些高级日志记录工具,如SmartInspectCodeSite和其他。

答案 1 :(得分:26)

最简单的方法是编译为控制台应用程序,但将正常的应用程序框架代码放回到dpr中。

program Project2;

{$APPTYPE CONSOLE}

uses
  Forms,
  SysUtils,
  Unit1 in 'Unit1.pas' {Form1};

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  writeln('Hello, World!');
  Application.Run;
end.

稍微复杂一点的方法是使用Windows API AllocConsole调用:

program Project2;

uses
  Forms,
  SysUtils,
  Windows,
  Unit1 in 'Unit1.pas' {Form1};

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  AllocConsole;
  writeln('Hello, World!');
  Application.Run;
end.

如果从命令行调用,此方法(通常)具有创建新控制台的缺点。从内存获取重定向到工作需要更多的代码。 优点是您可以决定在运行时分配控制台,而不是编译时。

答案 2 :(得分:9)

Delphi有一个选项,在项目的链接器选项中检查"Generate console application"。标准I / O将被定向到一个控制台窗口,该窗口将伴随您的 GUI 应用程序。然后你可以像往常一样使用Writeln等。

从文档中阅读Output(或Input):

  

Delphi程序具有标准输出   文件,如果它们作为控制台链接   应用

答案 3 :(得分:1)

如果你编写了控制台应用程序,你可以在控制台应用程序中尝试OutputDebugString函数(我没试过)。

或者您可以捕获控制台应用程序的输出,例如 Capture the output from a DOS (command/console) Window

此外,您还可以查看 Console Application Runner Classes 。我使用这些课程。我认为他们很棒。