Yes, we should fix our stepping to avoid these line number 0. I would avoid changing LineEntry::IsValid(), but possibly add another check like "IsValidSourceLocation()" that would return
bool LineEntry::IsValidSourceLocation() const { return IsValid() && m_line != 0; } We should let Jim comment on any stepping related changed. On Mar 15, 2014, at 1:40 AM, Andrew MacPherson <andrew.m...@gmail.com> wrote: > Ok, that makes sense, I should have provided more context. > > We use LLVM's DIBuilder to add debug info to our JITed KL language and there > are certain functions we provide which are internal and for which we don't > want to provide line info. We want these functions to show up named in stack > traces but would prefer to not have file and line info show up. We have been > passing 0 as the line number for these functions (DIBuilder's > createFunction() requires a line number) which makes them behave as we want > in gdb, however in LLDB they show up coming from our dummy internal file name > on line 0. > > This isn't a big deal but would be nice to fix, the one which prompted us to > look into this though was around stepping. In gdb these internal functions > are skipped by default because they have no source and line info, whereas > when stepping in LLDB (with the avoids-no-debug flags set) stepping still > hits these functions even though there's no source available for them, which > we'd like to avoid. > > Taking another look maybe the correct fix would be to modify > LineEntry::IsValid() to add a check for line != 0 too? > > Thanks, > Andrew > > > On Fri, Mar 14, 2014 at 7:29 PM, Greg Clayton <gclay...@apple.com> wrote: > I agree with Jim in that it is nice to know when a compiler told us line 0, > versus "invalid info" where UINT32_MAX is the value. I would vote to leave > things as is unless you have a convincing argument otherwise. > > > On Mar 14, 2014, at 11:21 AM, jing...@apple.com wrote: > > > lldb uses LLDB_INVALID_LINE_NUMBER to mean line number information is not > > available, and 0 to mean this is code that was generated by the compiler, > > but is artificial. That's the way clang marks code (e.g. junk generated by > > ARC) that lldb will need to step through, or whatever, but should not show > > to the user. > > > > That's a useful distinction, and I'd like to maintain it. What bad > > behavior are you seeing based on this? > > > > Jim > > > > On Mar 14, 2014, at 1:49 AM, Andrew MacPherson <andrew.m...@gmail.com> > > wrote: > > > >> gdb assumes that any debug entry with a line number of 0 means that line > >> number information is not available (see struct symtab_and_line here): > >> > >> http://www.opensource.apple.com/source/gdb/gdb-967/src/gdb/symtab.h > >> > >> lldb currently uses UINT32_MAX for the same thing. > >> > >> I suggest changing lldb to use the same value as gdb so that it's possible > >> to mark line entry data as invalid in the same way for both debuggers. > >> > >> Thanks, > >> Andrew > >> <invalid-line-number.patch>_______________________________________________ > >> lldb-dev mailing list > >> lldb-dev@cs.uiuc.edu > >> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev > > > > _______________________________________________ > > lldb-dev mailing list > > lldb-dev@cs.uiuc.edu > > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev > > _______________________________________________ lldb-dev mailing list lldb-dev@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev