> On Feb 26, 2016, at 2:49 PM, Zachary Turner <ztur...@google.com> wrote:
> 
> 
> 
> On Thu, Feb 18, 2016 at 6:16 PM Greg Clayton <clayb...@gmail.com> wrote:
> 
> > Just to make sure I understand, is it safe to say that:
> >
> > If check_inlines is false, sc_list should return with exactly 1 
> > SymbolContext with m_comp_unit set to the main source file?
> 
> You would get one SymbolContext per compile unit whose path matches the 
> file_spec _and_ contains a line number. There might be multiple "Foo.cpp" 
> files in different directories withing one PDB file, so you might still end 
> up finding N matches. So your existing code can be used when check_inlines if 
> false as long as the PDB can search by fullname and by basename. I am 
> guessing it doesn't though, am I wrong?
> 
> > The same for the check_inlines is false calse -- we still just have  
> > SymbolContext but we add line table entries from all additional files that 
> > contribute to the compilation unit?
> > When will sc_list end up with multiple entries?
> 
> You always look through all compile units. If check_inlines is false, then 
> you make sure "file_spec" matches (by basename  if only basename is 
> specified, or by full path if a directory and filename are valid inside 
> file_spec. If the file matches, then look for any lines that match and return 
> ALL instances of them. Auto inlining of a function inside a compile unit 
> might cause there to be many entries for line 10.
> 
> I'm coming back around to this now.  What happens if check_inlines is False, 
> but the FileSpec is a header file like <vector>.  You said "If check_inlines 
> is false, make sure file_spec matches".  But if file_spec is a header file, 
> it's never going to match anything.  Should I simply expect that the API is 
> not called in this way?  

It can be called, but you should only match on compile units whose files match 
"vector" as the basename.

> i.e. if I write b vector:1234 then I can expect that check_inlines will be 
> true?

By default check_inlines is always true, but the user can change this setting:

(lldb) settings set target.inline-breakpoint-strategy 
Available completions:
        never
        always
        headers

The default is aways:

(lldb) settings show target.inline-breakpoint-strategy 
target.inline-breakpoint-strategy (enum) = always

"headers" will try to determine if the source file name is actually a header 
and enable check_inlines only if it thinks it is a header. Or I should say it 
will enable check_inlines if it things the file is _not_ a source file. So 
anything with no extension will always be a header.

So you can expect that check_inlines will be true. If someone writes code that 
is C and C++ only where they never inline anything, they can get a performance 
boost from setting the setting to "headers" or "never" as we won't be going 
through all lines tables looking for "foo.cpp" looking for inline instances. 

Greg


_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to