Developing a cross-platform application using Borland CLX -- the
cross-platform application framework for Delphi 6 and Kylix -- is a joy. But
sometimes even developers who use the most powerful tools encounter problems.
You may have come across situations in which the IDE's integrated debugger is interfering with
the process of debugging. No problem -- that's why NuMega invented SoftICE.
Right?
Er, wrong. At this writing, there is no SoftICE for Linux.
What's a poor programmer to do?
When the going gets tough, tough programmers dust off the old tried-and-true
solutions. Like embedding debug messages in your code and writing them to the
screen. Preferably to a separate window -- maybe a console window -- so the application you're trying to debug doesn't get its
activities messed up.
If you have developed a console application in Windows, youl know
that there is an application type directive in the beginning of the project
source that tells Delphi to produce a console app. If you are a Windows
programming old-timer, you're aware that a Windows application can
have either a Windows GUI or a command-line interface. What is not clear is how you make a Delphi application
do both at the same time.
It is, in fact, very simple to do.
Develop your GUI application normally. When you're done, view
the project source and insert the application type directive for a console
application into the project source, right after your application name, like
this.
In Linux, the same code works.
Now, in order to passively debug your project, all you have to do is develop a Pascal unit
that contains a global Boolean variable such as IsDebugging and a routine such as
OutputDebugStr that takes a string parameter. (Write a command-line
parser that determines whether an option such as -debug is present or not. If it
is present, set IsDebugging to true.) Now pepper each block of code that you want
to debug or monitor with OutputDebugStr messages.
I have developed an example
CLI_IntegratedDebugger
unit to get you started.
For this technique to work in Linux, you should start your
application from the console. If your application is named CLXRunner in the current
directory, open up a console and type ./CLXRunner in order to execute your application.
Remember to add CLI_IntegratedDebugger to the uses clause of each unit, otherwise,
your project might not compile.
In my example,
I added an IsConsole check to the IsDebugging check so that, should you accidentally delete
the application type directive, your application will not write blindly to the
console and cause your application to fail or behave unpredictably.
I hope this article will provide you another tool in your arsenal of weapons that
can help you track down bugs in CLX applications.
Chee Wee lives in Singapore. He is certified under CCNA,
MCSE, SCJP, and SCSA. He can be reached at
chuacw@rightsecurity.biz.