From: guillaume.portail@grospied.enanglais.com
Subject: Conditional compilation of debug traces without cpp
Date: Tue, 04 Jul 2006 20:06:51 +0200
Date: 2006-07-04T20:06:46+02:00 [thread overview]
Message-ID: <44aaae35$0$5389$626a54ce@news.free.fr> (raw)
Hi,
I have pieces of code like this (please just follow the general idea and
forgive syntax errors) :
package Debug is
procedure Put_Line (M : in String);
end;
package body Debug is
Enabled : constant Boolean := False;
procedure Put_Line (M : in String) is
begin
if Enabled then
Real_Put_Line (M);
end;
end;
end;
Many other units, many calls like :
...
Debug.Put_Line ("PC was here, A = ", A_Type'Image(A)); -- (1)
...
Debug.Enabled is a compile time constant, so with a bit of -O3 pragma
Inline or other (-gnatN), the binary implementation of Debug.Put_Line
will be null. But never will be the elaboration of the many calls to it.
I guess that the elaboration of theses calls is always required by the
language, think of :
Debug.Put_Line ("PC was here, A = " & A_Function_Call(12)); -- (2)
Debug.Put_Line ("PC was here, A = " & A_Function_Call(1/0)); -- (3)
For my need, A_Function_Call is only for debugging purpose here, it has
no side effect (it is a function).
How may I organize the code to obtain the effect of having Debug.* calls
being nulls when Debug.Enabled is False ?
For your information, this is easy using cpp :
#if _DEBUG
#define DEBUG(x) real_put_line x
#else
#define DEBUG(x) 0
...
if (foo)
{
a = something;
DEBUG(("PC was here, A=%d", b()+a));
}
else
DEBUG(("no foo"));
...
And I would like not to use cpp or gnatprep, etc.
What is the trick ?
--
Thierry Bernier
next reply other threads:[~2006-07-04 18:06 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-04 18:06 guillaume.portail [this message]
2006-07-04 19:07 ` Conditional compilation of debug traces without cpp Ludovic Brenta
2006-07-04 19:14 ` guillaume.portail
2006-07-04 21:39 ` Björn Persson
2006-07-04 21:43 ` guillaume.portail
2006-07-04 22:01 ` Björn Persson
2006-07-05 3:10 ` Matthew Goulet
2006-07-04 20:24 ` Gautier
2006-07-04 20:54 ` Simon Wright
2006-07-05 13:03 ` Jean-Pierre Rosen
2006-07-05 19:39 ` guillaume.portail
2006-07-06 5:53 ` Martin Krischik
2006-07-07 10:32 ` Stephen Leake
2006-07-07 14:08 ` M E Leypold
2006-07-06 7:59 ` Jean-Pierre Rosen
2006-07-06 20:25 ` guillaume.portail
2006-07-07 5:00 ` Matthew Goulet
2006-07-07 13:57 ` Thierry Bernier
2006-07-07 21:08 ` Randy Brukardt
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox