> On Jul 21, 2020, at 11:13 AM, Jonas Devlieghere <jo...@devlieghere.com> wrote:
> 
> I don't mind adding the two-letter commands, but I also don't really see the 
> value in being able to say `bs` instead of `b s -y`. Until either becomes 
> muscle memory, both require a little cognitive overhead of thinking 
> "breakpoint set -y" or "breakpoint source". As a user there would be more 
> value in knowing that the latter is really `breakpoint set -y` which then 
> allows you to query the help.

Yes, I don’t really understand people’s objection to “br s -y” or whatever, and 
peering over people’s shoulders indicates it is not universal.  But there are a 
significant number of folks who are happier with a single command to type and 
“b s -y” seems to be a hinderance.  I was trying to help in this case, not 
trying to understand...

> 
> If I understand correctly the problem with `b` is that the regex can't 
> distinguish easily between what it should parse and what it should forward to 
> `breakpoint set`. Additionally, because it's essentially a mini-language, you 
> can't be sure if something with a colon is a symbol or file separated by a 
> line/column number. 

More that that.  If you type:

(lldb) b f<TAB>

then we have to complete f in all the collections “b” might access, symbol 
names and file names in this case.  In a substantial project that’s a lot of 
symbols if I meant a file name and vice versa.  And the more we glom into the 
break-specification mini language, the harder this will be.

> 
> I think we should be able to solve the first issue by making `b` a proper 
> first-class command instead of a regex alias, taking the exact same options 
> as `breakpoint set`. I think our existing command object argument parser 
> should be able to parse this and return the remaining "free form" argument, 
> which we can then parse as a mini-language like we do today. Of course this 
> would remain suboptimal, but would be strictly better than what we have today 
> and address the original problem you're trying to solve. Furthermore, with a 
> first-class command we can do a better job on the help front which is really 
> underwhelming for _regexp_break command aliases.
> 
> That leaves the second problem, which would be solved by the new two-letter 
> commands but not by changing `b`. From a purity perspective I'd lean towards 
> the new commands, but as a user I doubt I would use them. I set almost all my 
> breakpoints with `b` and I don't see a compelling reason to change to `bs`. 
> So that leaves me with using `b` most of the time, until I do need to pass 
> some extra option at which point I'll probably just use `breakpoint set` 
> directly. 
> 
> TL;DR: Given how widely used `b` is I'd rather improve that and turn it from 
> a 98% solution into a 99% solution instead of adding new commands.

I was hoping that since “bs”, “ba”, and “bn” are easy to type and would show up 
in a top-level “help” new folks would shift to using those, and maybe extant 
users of “b” would too.  Then we could slide past having the 
“break-specification mini-language” over time.

I was also trying to make things a little better w/o signing up for making 
“_regex_break” work better which I don’t have any intention of doing 
personally...

Jim


> 
> 
> On Tue, Jul 21, 2020 at 10:22 AM Jim Ingham via lldb-dev 
> <lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org>> wrote:
> When we were first devising commands for lldb, we tried to be really 
> parsimonious with the one & two letter unique command strings that lldb ships 
> with by default.  I was trying to leave us as much flexibility as possible as 
> we evolved, and I also wanted to make sure we weren’t taking up all the 
> convenient short commands, leaving a cramped space for user aliases.
> 
> The _regex_break command was added (and aliased by default to ‘b’) as a way 
> to allow quick access for various common breakpoint setting options.  However 
> it suffers from the problem that you can only provide the options that are 
> recognized by the _regexp_break command aliases.  For instance, you can’t add 
> the -h option to make a hardware breakpoint.  Because the “_regex_break 
> command works by passing the command through a series of regex’s stopping at 
> the first match, trying to extend the regular expressions to also include 
> “anything else” while not causing one regex to claim a command that was 
> really meant for a regex further on in the series is really tricky.
> 
> That makes it kind of a wall for people.  As soon as you need to do anything 
> it doesn’t support you have to go to a command that is not known to you 
> (since “b” isn’t related to “break set” in any way that a normal user can 
> actually see.)
> 
> However, lldb has been around for a while and we only have two unique 
> commands of the form “b[A-Za-z]” in the current lldb command set (br and bt). 
>  So I think it would be okay for us to take up a few more second letter 
> commands to make setting breakpoints more convenient.  I think adding:
> 
> bs (break source) -> break set -y
> ba (break address) -> break set -a
> bn (break name) -> break set -n
> 
> would provide a convenient way to set the most common classes of breakpoints 
> while not precluding access to all the other options available to “break 
> set”.  We could still leave “b” by itself for the _regex_break command - 
> people who’ve figured out it’s intricacies shouldn’t lose their investment.  
> This would be purely additive.
> 
> What do people think?
> 
> Jim
> 
> 
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev@lists.llvm.org <mailto:lldb-dev@lists.llvm.org>
> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev 
> <https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev>

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

Reply via email to