jingham added a comment.

In D137000#3902217 <https://reviews.llvm.org/D137000#3902217>, @labath wrote:

> In D137000#3897878 <https://reviews.llvm.org/D137000#3897878>, @jgorbe wrote:
>
>> I'm looking at the option of using a non-printable character for the short 
>> flag, and at the same time make `--regex` and `--recognizer-function` 
>> mutually exclusive using option groups. One problem I see is that the 
>> command help gets pretty confusing. Using a non-printable character as the 
>> short option name makes the option completely disappear from the "Command 
>> Options Usage" summary part of the help.
>>
>> For example, for `disassemble` the `--force` option is defined with 
>> `Groups[2,3,4,5,7]` but there's no indication in the usage summary that 
>> `--force` is only usable in some of the groups:
>
> Hmm.. you're right, I didn't know that.  I'll leave it up to you, but 
> personally I wouldn't consider it a blocker, as I think that the way we print 
> our option group help needs an overhaul anyway. I mean, the idea is kinda 
> nice, but after a certain number of options (and groups) it just becomes 
> ridiculous. For example, I'd like to meet the person who can make sense of 
> this:
>
>   Command Options Usage:
>     breakpoint set [-DHd] -l <linenum> [-G <boolean>] [-C <command>] [-c 
> <expr>] [-i <count>] [-o <boolean>] [-q <queue-name>] [-t <thread-id>] [-x 
> <thread-index>] [-T <thread-name>] [-R <address>] [-N <breakpoint-name>] [-u 
> <column>] [-f <filename>] [-m <boolean>] [-s <shlib-name>] [-K <boolean>]
>     breakpoint set [-DHd] -a <address-expression> [-G <boolean>] [-C 
> <command>] [-c <expr>] [-i <count>] [-o <boolean>] [-q <queue-name>] [-t 
> <thread-id>] [-x <thread-index>] [-T <thread-name>] [-N <breakpoint-name>] 
> [-s <shlib-name>]
>     breakpoint set [-DHd] -n <function-name> [-G <boolean>] [-C <command>] 
> [-c <expr>] [-i <count>] [-o <boolean>] [-q <queue-name>] [-t <thread-id>] 
> [-x <thread-index>] [-T <thread-name>] [-R <address>] [-N <breakpoint-name>] 
> [-f <filename>] [-L <source-language>] [-s <shlib-name>] [-K <boolean>]
>     breakpoint set [-DHd] -F <fullname> [-G <boolean>] [-C <command>] [-c 
> <expr>] [-i <count>] [-o <boolean>] [-q <queue-name>] [-t <thread-id>] [-x 
> <thread-index>] [-T <thread-name>] [-R <address>] [-N <breakpoint-name>] [-f 
> <filename>] [-L <source-language>] [-s <shlib-name>] [-K <boolean>]
>     breakpoint set [-DHd] -S <selector> [-G <boolean>] [-C <command>] [-c 
> <expr>] [-i <count>] [-o <boolean>] [-q <queue-name>] [-t <thread-id>] [-x 
> <thread-index>] [-T <thread-name>] [-R <address>] [-N <breakpoint-name>] [-f 
> <filename>] [-L <source-language>] [-s <shlib-name>] [-K <boolean>]
>     breakpoint set [-DHd] -M <method> [-G <boolean>] [-C <command>] [-c 
> <expr>] [-i <count>] [-o <boolean>] [-q <queue-name>] [-t <thread-id>] [-x 
> <thread-index>] [-T <thread-name>] [-R <address>] [-N <breakpoint-name>] [-f 
> <filename>] [-L <source-language>] [-s <shlib-name>] [-K <boolean>]
>     breakpoint set [-DHd] -r <regular-expression> [-G <boolean>] [-C 
> <command>] [-c <expr>] [-i <count>] [-o <boolean>] [-q <queue-name>] [-t 
> <thread-id>] [-x <thread-index>] [-T <thread-name>] [-R <address>] [-N 
> <breakpoint-name>] [-f <filename>] [-L <source-language>] [-s <shlib-name>] 
> [-K <boolean>]
>     breakpoint set [-DHd] -b <function-name> [-G <boolean>] [-C <command>] 
> [-c <expr>] [-i <count>] [-o <boolean>] [-q <queue-name>] [-t <thread-id>] 
> [-x <thread-index>] [-T <thread-name>] [-R <address>] [-N <breakpoint-name>] 
> [-f <filename>] [-L <source-language>] [-s <shlib-name>] [-K <boolean>]
>     breakpoint set [-ADHd] -p <regular-expression> [-G <boolean>] [-C 
> <command>] [-c <expr>] [-i <count>] [-o <boolean>] [-q <queue-name>] [-t 
> <thread-id>] [-x <thread-index>] [-T <thread-name>] [-N <breakpoint-name>] 
> [-f <filename>] [-m <boolean>] [-s <shlib-name>] [-X <function-name>]
>     breakpoint set [-DHd] -E <source-language> [-G <boolean>] [-C <command>] 
> [-c <expr>] [-i <count>] [-o <boolean>] [-q <queue-name>] [-t <thread-id>] 
> [-x <thread-index>] [-T <thread-name>] [-N <breakpoint-name>] [-h <boolean>] 
> [-w <boolean>]
>     breakpoint set [-DHd] -P <python-class> [-k <none>] [-v <none>] [-G 
> <boolean>] [-C <command>] [-c <expr>] [-i <count>] [-o <boolean>] [-q 
> <queue-name>] [-t <thread-id>] [-x <thread-index>] [-T <thread-name>] [-N 
> <breakpoint-name>] [-f <filename>] [-s <shlib-name>]
>     breakpoint set [-DHd] -y <linespec> [-G <boolean>] [-C <command>] [-c 
> <expr>] [-i <count>] [-o <boolean>] [-q <queue-name>] [-t <thread-id>] [-x 
> <thread-index>] [-T <thread-name>] [-R <address>] [-N <breakpoint-name>] [-m 
> <boolean>] [-s <shlib-name>] [-K <boolean>]

If I were starting over, I would make "break set" be a multiword command with 
sub-commands for all the primary specification operations (`break set file`, 
`break set name` etc.)  We could use unique first letters for all the actual 
operations, so this would actually be LESS typing by one dash, and would allow 
for better documentation of the shared options.  But I don't think we can get 
away with that at this point.

This display while noisy is the only way you can see all the kinds of 
breakpoint setting operations, so we really have to have something like this, 
and it should be fairly reliable...  It would also be nice if help also 
understood options, so for instance:`help break set -a` should only show you 
the variants that include that option.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D137000/new/

https://reviews.llvm.org/D137000

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

Reply via email to