Debugger Console App

From Lazarus wiki
Revision as of 07:16, 6 June 2012 by Chronos (talk | contribs)

Introduction

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.

Windows

On Windows the app will open it's own console window, just as it would outside the debugger. There is no need to do anything special.

Linux

Lazarus 0.9.30 / 0.9.30.2

Please see the notes on Mac.

Lazarus 0.9.31

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

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 send to your app.

Mac

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

Console apps 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 app 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":

 >/somedir/somefile

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

 pty

It should return something like

 /dev/pty/2

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

Note
The returned value is only valid al 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 app, 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

Note, that this means you still can't use ctrl-c in the input

Debugger startup options

In the global option's dialog, on the debugger page, you can specify params given to gdb (do not use the in/output redirect here ">" / "<" here, use something like --args).

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

Lazarus 0.9.31

In the global option's 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 "<" / ">" redirects.

See also