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

emu*_*rad 27 delphi windows-console

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

小智 31

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

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

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

还有SmartInspect,CodeSite等先进的日志记录工具.

  • FWIW,我想提一下,这不回答这个问题,即"我怎样才能写入***控制台窗口***进行调试?"* (8认同)

Ger*_*oll 29

最简单的方法是编译为控制台应用程序,但将正常的应用程序框架代码放回到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.
Run Code Online (Sandbox Code Playgroud)

稍微复杂一点的方法是使用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.
Run Code Online (Sandbox Code Playgroud)

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


Ser*_*yuz 10

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

从文档中读取输出(或输入):

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