Debugger Console App

From Free Pascal wiki
Revision as of 14:25, 31 January 2021 by Trev (talk | contribs) (→‎Windows: Note window closes automatically so add ReadLn;)
Jump to navigationJump to search


This page contains information on how to debug console applications in Lazarus. That is where to find the output (writeln) of your app, and where to type the input (readln).

This page was written for Lazarus 0.9.30 and above.


On Windows, the application will open its own console window, just as it would outside the debugger. There is no need to do anything special apart from adding a ReadLn; before the application terminates so that the console window does not automatically close until you press Enter.


Lazarus 0.9.30 /

Please see the notes in the#Mac section.

Lazarus 0.9.31 / 1.0 and higher

You can open a console window from the menu: "View" => "Debug Windows" => "Terminal Output"

It shows the raw output of your application. Note it has no support for any escape sequences, as some terminals may have. Anything you type into this window will be sent to your application.

Mac & Linux

Unfortunately there is currently no built-in support for debugging console applications.

Console applications do not have their own terminal, but use the terminal they were started from (the terminal of the shell they were started from). When started from within Lazarus, there is no such terminal. You can specify a "starter application" (like xterm) under menu "Run" => "Run parameters". however this only works if you start your application without a debugger. This does not work for debugging.

There are a couple of workarounds.

Redirect output to file

In menu "Run" => "Run parameters": specify in "command line parameters":


Then outside Lazarus open a shell and run

tail -f /somedir/somefile

Redirect input and output to a pty (terminal)

Open a terminal outside of Lazarus and run


On Ubuntu 18, the command is


It should return something like


The exact value depends on the OS and the number of terminals already open.

The returned value is only valid as long as the terminal stays open, so if you open a new terminal next time you debug in Lazarus, you need to adapt all settings to the new value.

In menu "Run" => "Run parameters": specify in "command line parameters":

 >/dev/pty/2 </dev/pty/2

If you want to use the terminal to send input to your application, then you may need to stop the shell in it from reacting to the input (unless you started a terminal without a shell). Run something like

tail -f /some/empty/file/that/does/not/change
Light bulb  Note: This means you still can't use ctrl-c in the input.

Debugger startup options

In the global options dialog, on the debugger page, you can specify parameters given to gdb (do not use the in/output redirect > or < here, which is meant for interactive bash but use something like --args).

It may be possible to specify the pty here, but there is currently no further info.


Use the gdbserver based debugger. You can start gdbserver on the same computer as the IDE. Run gdbserver inside the terminal that you want to use for your stdout/stdin

Lazarus 0.9.31

In the global options dialog, on the debugger page is an entry "ConsoleTty". You can enter the result of "pty" here. Then you do not need to specify any < or > redirects.

See also