How can I write to the console window for debugging?

emurad picture emurad · Dec 12, 2010 · Viewed 43.9k times · Source

Can I display the result of a loop in the console window in a VCL application for debugging purposes?

Answer

Gerry Coll picture Gerry Coll · Dec 12, 2010

The simplest way is to compile as a console application, but put the normal application framework code back in the 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.

A slightly more complex way is to use the Windows API AllocConsole call:

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.

This method has the (usually) disadvantage of creating a new console if you are calling from the command line. From memory getting redirection to work requires some more code as well. The advantage is that you can decide to allocate the console at run-time, rather than compile time.