[lldb-dev] What's the best way to use "--all-files" option from python?

Greg Clayton via lldb-dev lldb-dev at lists.llvm.org
Wed Oct 25 09:41:28 PDT 2017


Are glob characters legal file characters on any systems? If so we can't do the auto detect where we override the meaning of -f. If not, then we can. We could add a --glob option that goes along with the -f option if glob characters are valid file system characters.

There are a few breakpoint options that aren't available via the lldb::SB API layer. Not skipping the prologue for breakpoints by name and regex is one of them.

It would be nice to follow other examples where we make a options class that has nice defaults and get sent to each breakpoint kind.

The current API is:

  lldb::SBBreakpoint BreakpointCreateByName(const char *symbol_name,
                                            const char *module_name = nullptr);

  // This version uses name_type_mask = eFunctionNameTypeAuto
  lldb::SBBreakpoint
  BreakpointCreateByName(const char *symbol_name,
                         const SBFileSpecList &module_list,
                         const SBFileSpecList &comp_unit_list);

With a breakpoint options class we would add:

  lldb::SBBreakpoint
  BreakpointCreateByName(const char *symbol_name,
                         lldb::SBBreakpointOptions &options);


Then we can make SBBreakpointOptions be able to set any kinds of filters we want.

The missing things that come to mind are:
- don't skip prologue
- don't set inlined breakpoints (concrete only) (this is missing in the command line interface as well)
- limiting to certain files or shared libraries (only available on some SBTarget::BreakpointCreateXXX() functions)
- thread specific settings
- hit count
- skip count
- setting condition on breakpoint right away instead of making another API call

> On Oct 25, 2017, at 6:15 AM, Don Hinton via lldb-dev <lldb-dev at lists.llvm.org> wrote:
> 
> I'd also like to include the path in the pattern, e.g., -f "*/clang/*", which would cut the number of files examined by about half for my use case.
> 
> 
> 
> On Tue, Oct 24, 2017 at 7:24 PM, Zachary Turner <zturner at google.com <mailto:zturner at google.com>> wrote:
> Pass a pattern to the -f option.  
> 
> On Tue, Oct 24, 2017 at 7:18 PM Don Hinton <hintonda at gmail.com <mailto:hintonda at gmail.com>> wrote:
> Do you mean just pass a pattern to the -f option or FileSpec?
> 
> On Tue, Oct 24, 2017 at 6:50 PM, Zachary Turner <zturner at google.com <mailto:zturner at google.com>> wrote:
> It might be worth brainstorming if there’s ways to do this that are both intuitive and don’t require more options.  As a command line user, I really value my keystrokes.  
> 
> One idea would be to use a syntax that matches that of the ‘-name’ option to the standard ‘find’ utility.  This way filename pattern matching would work in a way familiar to almost everyone, no sb api options would need to be added.
> 
> 
> 
> On Mon, Oct 23, 2017 at 6:25 PM Jim Ingham via lldb-dev <lldb-dev at lists.llvm.org <mailto:lldb-dev at lists.llvm.org>> wrote:
> Yeah, that would be easy to implement from the command line, maybe add a --file-is-regex flag or something.
> 
> From the SB API it would be better to have something like:
> 
> SBFileList SBTarget.GetFileListMatchingRegex("regex")
> 
> Please file an enhancement request for these of hack'em in if you're so motivated.
> 
> Jim
> 
> 
> > On Oct 23, 2017, at 6:13 PM, Don Hinton <hintonda at gmail.com <mailto:hintonda at gmail.com>> wrote:
> >
> > Ah, great, thanks.  I just figured the default was the same for both.
> >
> > Just wish I could use a regex for the filename as well, which would cut down the number of files about about half.
> >
> > thanks again...
> > don
> >
> > On Mon, Oct 23, 2017 at 6:02 PM, Jim Ingham <jingham at apple.com <mailto:jingham at apple.com>> wrote:
> > Just pass an invalid FileSpec for the source file spec, like:
> >
> > lldb.target.BreakpointCreateBySourceRegex("printf", lldb.SBFileSpec())
> >
> > and it acts the same way as the --all-files option.  That was pretty non-obvious, I'll update the docs.
> >
> > Actually, the thing you CAN'T do is get the command line behavior where lldb uses the "default file" i.e. when you run "break set -p" but don't supply a file or the --all-files option.  That seemed to me less useful for a programming interface since the default file is history dependent (it's the file with "main" in it before you run, then it's where you last set a breakpoint, or where you last stopped, etc.)  If you needed this behavior it would be better to have the target vend the default file, though right now that's really only maintained by the breakpoint command...
> >
> > Jim
> >
> >
> > > On Oct 23, 2017, at 5:31 PM, Don Hinton via lldb-dev <lldb-dev at lists.llvm.org <mailto:lldb-dev at lists.llvm.org>> wrote:
> > >
> > > The only way I've been able to do it is by using the CommandInterpreter, i.e.,
> > >
> > >   res = lldb.SBCommandReturnObject()
> > >   lldb.debugger.GetCommandInterpreter().HandleCommand('breakpoint set -p "diag::%s" --all-files -N %s' % (name, name), res);
> > >   lldb.debugger.GetCommandInterpreter().HandleCommand('breakpoint disable %s' % name, res);
> > >
> > > Is this the best way to do it?  Can't seem to figure out how to use SBTarget.BreakpointCreateBySourceRegex() for all files.
> > >
> > > thanks...
> > > don
> > > _______________________________________________
> > > lldb-dev mailing list
> > > lldb-dev at lists.llvm.org <mailto:lldb-dev at lists.llvm.org>
> > > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev>
> >
> >
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at lists.llvm.org <mailto:lldb-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev>
> 
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20171025/a3720f08/attachment-0001.html>


More information about the lldb-dev mailing list