Hi Bud, gdb certainly works for ada (gnat), and can step through ada code and c code and fortran code all in the same program. (I may be stretching a little for fortran, because it has been a few years since i did this, but certainly ada and c, and certainly in the same program. And i think i jumped into some fortran at the same time.) But this was not a gdb i built myself, but that came with the gnat distribution. On the other hand, it is gpl'ed and i believe publicly available at least for older versions. dan On Fri, Nov 20, 2009 at 1:45 PM, Bud Davis <bdavis9659@xxxxxxxxxxxxx> wrote: > > I posted this question almost a month ago on the gdb mailing list with > no replies. {this isn't a complaint, just so you know I did try that > avenue). > > Does anyone have a hint from gcc world ? > > thanks, > bud davis > > > > Hello, > > I am attempting to use gdb to debug some ada code. My goal is to set a > catchpoint when an exception is raised. > > Below is a small example (except for b.ads, which is trivial to create). > The example does nothing other than raise a range_error or explicitly > call an exception. > > Using gcc-3.4.6 for the compiler, and gdb-6.8 for gdb. > > I looked at gdb source, and here is the pertinent comment for the error > message: > > > /* At this point, we know that we are debugging an Ada program and > that the inferior has been started, but we still are not able to > find the run-time symbols. That can mean that we are in > configurable run time mode, or that a-except as been optimized > out by the linker... In any case, at this point it is not worth > supporting this feature. */ > > So, evidently I am compiling this wrong or linking it in a way which is > not supported by gdb. > > Any ideas ? > > Thanks, > Bud Davis > > > > > > $ cat try.adb > with text_io; > use text_io; > with b; > > procedure try is > begin > for I in 0..10000 loop > b.run; > end loop; > exception > when others=> > text_io.put_line("in handler"); > raise; > end; > $ cat b.adb > with text_io; > use text_io; > package body b is > i:natural:=1; > procedure run is > begin > i:=i - 1; > raise program_error; > end run; > end b; > $ rm try *.o > $ gnatmake -g try > gcc -c -g try.adb > gcc -c -g b.adb > gnatbind -x try.ali > gnatlink try.ali -g > $ gdb try > GNU gdb 6.8 > Copyright (C) 2008 Free Software Foundation, Inc. > License GPLv3+: GNU GPL version 3 or later > <http://gnu.org/licenses/gpl.html> > This is free software: you are free to change and redistribute it. > There is NO WARRANTY, to the extent permitted by law. Type "show > copying" > and "show warranty" for details. > This GDB was configured as "i686-pc-linux-gnu"... > (gdb) break main > Breakpoint 1 at 0x80494e5: file b~try.adb, line 132. > (gdb) run > Starting program: /home/users/td24812/aio/try > > Breakpoint 1, main (argc=1, argv=(system.address) 0xbfef12f4, > envp=(system.address) 0xbfef12fc) at b~try.adb:132 > 132 Ensure_Reference : System.Address := > Ada_Main_Program_Name'Address; > (gdb) catch exception > Cannot insert catchpoints in this configuration. > (gdb) > > > ------------------------------------------------- > * "Consistently separating words by spaces became a general custom about the tenth century A.D., and lasted until about 1957, when FORTRAN abandoned the practice." —Sun FORTRAN Reference Manual > > > >