Proposed changes to empty command handling in JDB

Alan Bateman Alan.Bateman at oracle.com
Thu Aug 5 07:10:35 UTC 2021


On 05/08/2021 05:11, Jakob Cornell wrote:
> Hi folks,
>
> I've been looking to improve the usability of JDB a bit by imitating 
> GDB's handling of empty commands.  If the most recent command is one 
> that it makes sense to invoke repeatedly, GDB does so.  Also, when the 
> `list' command is repeated (by either typing it out or issuing an 
> empty command after a `list'), GDB shows the next chunk of source 
> lines, resetting to the line being executed when the user moves up or 
> down the stack or advances execution.
>
> Here are the changes I propose, based on suggestions from Chris Plummer:
>
> A new command line option (`-gdb' or `-repeat'?) is introduced which 
> enables GDB-like behavior.  When this mode is selected, entering an 
> empty command at the prompt reruns the previous command if it was one 
> of the following forms: `up', `down', `step', `step up', `stepi', 
> `next', `cont', `pop', `reenter', `!!', and `<n> <command>' (where any 
> of the preceding commands is being repeated).
>
> Currently JDB appears to use the current source line as the center of 
> its listings even when invoked repeatedly.  I haven't included an 
> auto-advance enhancement to that command here because it goes somewhat 
> beyond the narrow scope of implementing command repetition, but I'm 
> happy to implement that alongside these changes or in a separate 
> change set if the community sees fit.  I find this auto-advance useful 
> when using GDB and PDB.
>
> Any feedback is appreciated, but in particular I'm hoping to get some 
> input on these points:
>
> - If the repetition is limited to commands that are likely to be 
> repeated, is it necessary to have this feature off by default?
> - Would folks like to see auto-advance `list' behavior along with 
> these changes?
>
> JBS ticket: https://bugs.openjdk.java.net/browse/JDK-8271356

The gdb behavior is context dependent and not clear to me that it's 
worth trying to add it to jdb. If it is added then I think Chris is 
right that is might have to be disabled by default as it could otherwise 
break existing scripts/tests with empty lines. One place for 
configuration ~/.jdbrc and it might be that it can only be enabled for 
interactive sessions.

If usability is an issue then maybe it would be better to look at 
jshell  (the REPL that has been included since JDK 9). It makes us of 
jline so you get better input navigation, history navigation, and tab 
completion.  I suspect there is an interesting project there.

-Alan


More information about the serviceability-dev mailing list