15

I recently had to do some changes in some Delphi code. Therefore, I have some basics questions:

  1. Generally, how do I output to the console?
  2. How do I output to the console with fx that is a string variable?

I started using OutputDebugString, but I couldn't get it working with a variable.

5
  • When you say "output to console" are you actually developing a console app or do you want debug output printed? Commented Feb 2, 2011 at 10:44
  • Its an application with a GUI. I just want to write out in the Event log for debugging variables like i'm used to in fx. Java. Commented Feb 2, 2011 at 10:46
  • 4
    See also: stackoverflow.com/questions/4421042/… Commented Feb 2, 2011 at 10:47
  • 1
    {$IFDEF DEBUG}OutputDebugString(PChar(Format('Result = %d', [Result])));{$ENDIF} (* save that as code template *) Commented Feb 2, 2011 at 11:10
  • 1
    OutputDebugString does not write to the "console" or "event log". Delphi calls it "event log" but it is not the Windows Event Log. It's a "debugger log". OutputDebugString sends string to a registered debugger. SysInternals calls its debug string utility Debug View correctly. Commented Feb 2, 2011 at 17:28

3 Answers 3

31

You can write a wrapper function to take care of the variables passed to OutputDebugString as it expects a PChar.

Something like:

procedure DebugMsg(const Msg: String); begin OutputDebugString(PChar(Msg)) end; 

There is a useful reference for debugging techniques here.

And if your Delphi is a bit rusty there's the ever useful Delphi Basics site. I use it a lot :)

Sign up to request clarification or add additional context in comments.

1 Comment

why do people never write what is needed in the uses so that OutputDebugString is known by the compiler ?
4

In addition to the 2 answers you got about OutputDebugString() and WriteLn(), for debugging there is a better solution: CodeSite from Raize Software (see http://www.raize.com/DevTools/CodeSite/Default.asp ).

If you have Delphi XE, that should already come with an somewhat reduced functionality version of CodeSite.

1 Comment

CodeSite Express is available through the GetIt Package Manager
0

If you have a console application, just use write() and writeln() global functions. If you have a GUI application and want to create a separate console windows, things go tricky (this article will guide you through the process, though it's in C++).

2 Comments

Can check "generate console application" in linker options.
It is also possible to redirect WriteLn so that you can e.g. use a form with a memo field in it to display anything passed to Write() or WriteLn()