[cfe-dev] debug line info of a landing pad

Robinson, Paul Paul.Robinson at am.sony.com
Thu Feb 7 10:45:39 PST 2013


+Eric, ping?

> -----Original Message-----
> From: cfe-dev-bounces at cs.uiuc.edu [mailto:cfe-dev-bounces at cs.uiuc.edu]
> On Behalf Of Robinson, Paul
> Sent: Tuesday, February 05, 2013 12:17 PM
> To: Gao, Yunzhong; cfe-dev at cs.uiuc.edu
> Subject: Re: [cfe-dev] debug line info of a landing pad
> 
> > From: cfe-dev-bounces at cs.uiuc.edu [mailto:cfe-dev-bounces at cs.uiuc.edu]
> > On Behalf Of Gao, Yunzhong
> >
> > As a basis of this discussion, I compile the following two C++ files
> and
> > then step through them with gdb 7.2.
> >
> > $ clang++ -g test1.cc test2.cc -o a.out
> > $ gdb a.out
> >
> > /* begin of test1.cc */
> > struct foo {
> >   foo();
> >   ~foo();
> >   int get() { return a; }
> >
> > private:
> >   int a;
> > };
> >
> > foo::foo() { a = 16; }
> > foo::~foo() { a = 0; }
> >
> > extern "C" void call_me_yellow();
> > extern "C" void call_you_green();
> >
> > int main()
> > {
> >   int c = 100;
> >
> >   try {
> >     foo my_foo;
> >     call_me_yellow(); // landing pad #1
> >
> >     foo your_foo;
> >     call_you_green(); // landing pad #2
> >   }
> >
> >   catch (int a) {
> >     c = a;
> >   }
> >
> >   return c;
> > }
> > /* end of test1.cc */
> >
> >
> > /* begin of test2.cc */
> > extern "C" void call_me_yellow()
> > {
> >   throw 1;
> > }
> >
> > extern "C" void call_you_green()
> > {
> >   throw 2;
> > }
> > /* end of test2.cc */
> >
> > Since call_me_yellow() could throw an exception, Clang generates a
> > landing
> > pad for it. The debug line info of this landing pad is associated with
> > the
> > function call. If I set a breakpoint on the landing pad in gdb, this
> > source
> > line shows up when the breakpoint is hit.
> > 22          call_me_yellow(); // landing pad #1
> >
> > One customer asked, why does the debugger not stop at the beginning of
> > the
> > catch block when the exception is thrown.
> >
> > If I compile using GCC 4.4.3, the landing pads do not have associated
> > debug
> > line info, and because they immediately follow the generated codes for
> > the
> > try block, they implicitly get attached to the last statement in the
> try
> > block. If I set a breakpoint on the landing pad in gdb, this source
> line
> > shows up when the breakpoint is hit. Not really at the beginning of
> the
> > catch
> > block, but closer.
> > 25          call_you_green(); // landing pad #2
> >
> > So my question is, should the landing pads have associated debug line
> > info at
> > all, and what do you think are the reasonable source lines to attach
> > them to?
> > Here are some of the options that I can think of:
> >     (a)  no debug line info (like what gcc does)
> >     (b)  the call site      (like what clang does)
> >     (c)  the beginning of the (lexicographically) first catch block if
> > any;
> >     (d)  the end of the innermost enclosing try block;
> >
> > The same questions could be asked regarding the EHResume block as
> well.
> 
> I discussed this with Gao but we'd like some feedback from outside.
> Basically, (a) means that the landing pad block becomes associated with
> the same source loc as the block that physically precedes it, which is
> not entirely predictable. I can understand why (b) happens but I think
> really (c) or maybe (d) would be preferable from a debugging-experience
> perspective.
> 
> Also I think the more likely scenario is not so much trying to set a
> breakpoint on the landing pad (which requires real effort on the part
> of the user) but 'step' or 'finish' over a throw.
> 
> Eric/David, any thoughts here?
> Thanks,
> --paulr
> 
> >
> > As a side note, in gdb, I had to use "break *<address>" to put a
> > breakpoint
> > on the landing pad; "break test1.cc:22" does not put a breakpoint on
> the
> > landing pad. This seems like a gdb bug, although, for this discussion,
> > I'd
> > like to focus on the debug info generated by the compiler.
> >
> > Thanks for your options,
> > - Gao.
> 
> 
> 
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev






More information about the cfe-dev mailing list