From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,16e3a8dd4f3ab3f3 X-Google-Attributes: gid103376,public From: bobduff@world.std.com (Robert A Duff) Subject: Re: Elaboration order Date: 1996/03/26 Message-ID: #1/1 X-Deja-AN: 144230868 references: <314829CD.4FA9@lfwc.lockheed.com> <4xspevde88.fsf@leibniz.enst-bretagne.fr> organization: The World Public Access UNIX, Brookline, MA newsgroups: comp.lang.ada Date: 1996-03-26T00:00:00+00:00 List-Id: In article <4xspevde88.fsf@leibniz.enst-bretagne.fr>, Laurent Guerby wrote: > Here is a simple solution to this kind of problem : > >package Pure_IO is > pragma Pure; > > procedure Debug (Msg : in String); > pragma Import (C, Debug); > >end Pure_IO; > > Then do the dirty work (body) in Ada (convention C) or C. Excellent idea! Thanks. Does it really work? I mean you're sort of cheating here. You've declared that the thing is Pure, but you've lied. So the optimizer might play nasty tricks, like eliminating calls to Debug, if the only effect of Debug is its "side effect". I guess it's OK to cheat like that, since it's "merely" debugging code. But one has to be careful, in case one's optimizer is smarter that one is ;-). >... I don't >know if there's a pragma Import (Ada, xxx). GNAT seems to compile it, >I haven't checked if Import (C, xxx) is legal in a Pure unit. Import(Ada) should work. >: Gdb is not quite up to the point where I can use it all the time instead >: of debugging print-outs. (Of course, reading one's code is usually a >: better way of tracking down bugs, but not always.) > > It's true that the current GDB-GNAT has some weakpoints, but if you >add to your code (instead of plenty ugly "with Text_IO; Put_Line ...") >some "extra" procedures to set up complex data structures and to print >them (just like in the GNAT code anyway) it works quite well Yes, I do add all kinds of printing routines, and call them from gdb when necessary. My version of gdb, which might not be the latest, doesn't even know how to print strings. It prints a pair of addresses, instead of the characters of the string. >... (even for >multiple partitions or multiple tasks if you know what you're >doing). BTW report GDB problems according to the README file coming >with the GDB patch, this will help improving it. I suppose I should be a good citizen and do that. But reporting debugger bugs is even more difficult than reporting compiler bugs. Bleah. And sometimes I'm not really sure it's a debugger bug. For example, I recently noticed gdb printed "false" for some Boolean components of a packed record, but my print-out routine seemed to think they were True, and I wasn't quite sure if the bug was in gdb, or my program, or my print-out routines. In that particular case, I wasn't willing to spend hours tracking it down, once I found the "real" bug I was looking for. Thanks for the help. - Bob