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.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=unavailable autolearn_force=no version=3.4.4 X-Received: by 10.236.11.194 with SMTP id 42mr11661914yhx.19.1416696263003; Sat, 22 Nov 2014 14:44:23 -0800 (PST) X-Received: by 10.140.81.169 with SMTP id f38mr227359qgd.3.1416696262986; Sat, 22 Nov 2014 14:44:22 -0800 (PST) Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!usenet.blueworldhosting.com!feeder01.blueworldhosting.com!peer02.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!s7no1198944qap.1!news-out.google.com!w7ni319qay.0!nntp.google.com!s7no1198939qap.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Sat, 22 Nov 2014 14:44:22 -0800 (PST) In-Reply-To: Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=50.111.65.229; posting-account=Ies7ywoAAACcdHZMiIRy0M84lcJvfxwg NNTP-Posting-Host: 50.111.65.229 References: User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: Subject: Re: How to get nice with GNAT? From: brbarkstrom@gmail.com Injection-Date: Sat, 22 Nov 2014 22:44:22 +0000 Content-Type: text/plain; charset=ISO-8859-1 X-Received-Bytes: 3954 X-Received-Body-CRC: 813199155 Xref: news.eternal-september.org comp.lang.ada:23650 Date: 2014-11-22T14:44:22-08:00 List-Id: On Friday, November 21, 2014 6:41:45 AM UTC-5, Natasha Kerensikova wrote: > Hello, > > I happen to have found a situation in which symbolic traceback is a > great help, but I have been a bit surprise by the (lack of) support in > the platform to which I have access. > > I have been using GNAT.Traceback.Symbolic.Symbolic_Traceback, is there a > more portable way? > > In FreeBSD, with GNAT 4.9.0, I get an output like the following, with > the first line actually repeated about a hundred times: > > BFD: Dwarf Error: found dwarf version '4', this reader only handles version 2 information. > > 0x7e7773 in asis.gela.contexts.open at ??:0 > > 0x78cb43 in asis.ada_environments.open at ??:0 > > 0x46a7da in adactl at ??:0 > > 0x40690e in main at ??:0 > > 0x4069df in <_start> at ??:0 > > 0x800da3ffe in ?? at ??:0 > > In Debian/kFreeBSD, with GNAT 4.6, it looks like the following, which is > what I consider as perfect: > > 0x7fa993 in asis.ada_environments.open at asis-ada_environments.adb:241 > > 0x481a57 in adactl at adactl.adb:90 > > 0x417029 in main at b~adactl.adb:817 > > 0x8015a4347 in ?? at ??:0 > > 0x41706e in <_start> at ??:0 > > In Fedora 20, with GNAT 4.8.3, it looks like the following, which I find > the worst: > > 0x000000000069307D > > 0x00000000004733BD > > 0x0000000000410824 > > 0x0000003CC5A21D63 > > 0x000000000041086F > > 0xFFFFFFFFFFFFFFFE > > Considering the versions, I doubt that's the cause for the discrepancy. > I would rather wager on something related to addr2line. > > As a user, is there something I can do to improve the traceback > representation on those platforms? > Or is it completely in the hands of the GNAT packager/maintainer? > > > Thanks in advance for your help, > Natasha One possibility is to get in the habit of putting exception handling messages in every procedure interface, as in procedure DoSomething(stuff; OK : out Boolean; Err_Msg : out Bounded_String); if DoSomething throws an exception, the calling program can detect that OK is false and receive a message identifying the cause. Since the Ada Bounded_Strings package (see the RM) can append strings, you can return useful diagnostics by stringing together messages like Err_Msg := Vstring.To_Bounded_String("Error in DoSomething"); Err_Msg := Vstring.Append(Err_Msg, " caused by bad stuff "); ... I don't know how much overhead this will cause, but if you're working with complex logic, this approach can help identify where the problem is occurring. One advantage is that you can tailor the format and content of the messages so that you can understand what happened. With some thought, you could even label the messages and put them into a catalog for documenting errors on a production version. Bruce B.