jingham added inline comments.
================
Comment at: lldb/source/Commands/CommandObjectFrame.cpp:880
auto func =
- RegularExpressionSP(new RegularExpression(m_options.m_function));
+ RegularExpressionSP(new
RegularExpression(m_options.m_symbols.front()));
StackFrameRecognizerManager::AddRecognizer(recognizer_sp, module, func);
----------------
mib wrote:
> jingham wrote:
> > labath wrote:
> > > mib wrote:
> > > > labath wrote:
> > > > > mib wrote:
> > > > > > labath wrote:
> > > > > > > Is there something which ensure that m_symbols contains at least
> > > > > > > one element here? (i.e., that we do not silently drop the extra
> > > > > > > symbols arguments)
> > > > > > Few lines above, we make sure the symbols list is not empty.
> > > > > Not empty is one thing, but what about the case when it contains 2 or
> > > > > more elements (`frame recognizer add --name foo --name bar --regex`)?
> > > > > Will that produce some kind of an error, or will it just ignore the
> > > > > second regex ?
> > > > It takes only the first symbol and ignores the other ones.
> > > Hmm.. that doesn't sound very useful. I think that should be an error.
> > Just put --name and --regex in different option groups when you define the
> > command. Then the command machinery won't allow you to specify both at the
> > same time (and the help will show they are mutually incompatible).
> >
> > I agree with Pavel, an error is what you want in that case.
> @jingham I think this is wrong because `--regex` is just a boolean flag, not
> the actual regular expression.
>
> When this flag is enabled, the overloading for `AddRecognizer`that is called
> is the one that holds `RegularExpressionSP`s instead of the overloading with
> a `ConstString` and `llvm::ArrayRef<ConstString>` ...
>
> I'll add the check above to make sure `m_symbols` has only 1 entry when the
> `--regex` flag is enable and return an error otherwise.
Oh, that's unfortunate. It's weird that you can pass --name twice w/o the
--regex but only once with. But it's probably too late to change that now.
You solution sounds fine, though you should also amend the help string for
--name to say "can be specified more than once except if --regex is provided"
or this will be really confusing. BTW, if there any reason why this can't take
more than one regex? I allowed only one for breakpoints and things like the
"no step into source regex" on the theory that you can always just use "|" to
concatenate two regex's. That is in the end probably more efficient but for
maintenance it's easier if your regex's don't get too long, so I have wished on
occasion since then that I had allowed more than one regex for these options.
Note, the reason I don't like "--regex" as a flag is it makes the job of
providing completions for --name harder. Note, it's still possible if the user
typed:
(lldb) whatever --regex --name A<TAB>
because the option completion for --name can actually look at the whole command
line. For instance,
--shlib libBar.dylib --name Foo<TAB>
will limit the completions to names in libBar. But that makes it trickier to
do.
For folks designing commands, IMO would be better to have --name <NAME> and
--regex <REGEX> and not have the --regex be just a flag.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D76188/new/
https://reviews.llvm.org/D76188
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits