mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 9.1.1756: termdebug: Need a few more user commands
Problem: termdebug: Need a few more user commands Solution: Add the :RunOrContinue and the :ToggleBreak user commands (bennyyip) closes: #18283 Signed-off-by: bennyyip <yebenmy@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
c37f25c651
commit
c975d62473
@@ -2212,6 +2212,7 @@ $quote eval.txt /*$quote*
|
|||||||
:Rexplore pi_netrw.txt /*:Rexplore*
|
:Rexplore pi_netrw.txt /*:Rexplore*
|
||||||
:RmVimball pi_vimball.txt /*:RmVimball*
|
:RmVimball pi_vimball.txt /*:RmVimball*
|
||||||
:Run terminal.txt /*:Run*
|
:Run terminal.txt /*:Run*
|
||||||
|
:RunOrContinue terminal.txt /*:RunOrContinue*
|
||||||
:RustEmitAsm ft_rust.txt /*:RustEmitAsm*
|
:RustEmitAsm ft_rust.txt /*:RustEmitAsm*
|
||||||
:RustEmitIr ft_rust.txt /*:RustEmitIr*
|
:RustEmitIr ft_rust.txt /*:RustEmitIr*
|
||||||
:RustExpand ft_rust.txt /*:RustExpand*
|
:RustExpand ft_rust.txt /*:RustExpand*
|
||||||
@@ -2233,6 +2234,7 @@ $quote eval.txt /*$quote*
|
|||||||
:Termdebug terminal.txt /*:Termdebug*
|
:Termdebug terminal.txt /*:Termdebug*
|
||||||
:TermdebugCommand terminal.txt /*:TermdebugCommand*
|
:TermdebugCommand terminal.txt /*:TermdebugCommand*
|
||||||
:Texplore pi_netrw.txt /*:Texplore*
|
:Texplore pi_netrw.txt /*:Texplore*
|
||||||
|
:ToggleBreak terminal.txt /*:ToggleBreak*
|
||||||
:Tutor pi_tutor.txt /*:Tutor*
|
:Tutor pi_tutor.txt /*:Tutor*
|
||||||
:URLOpen eval.txt /*:URLOpen*
|
:URLOpen eval.txt /*:URLOpen*
|
||||||
:Until terminal.txt /*:Until*
|
:Until terminal.txt /*:Until*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
*terminal.txt* For Vim version 9.1. Last change: 2025 Sep 02
|
*terminal.txt* For Vim version 9.1. Last change: 2025 Sep 14
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -1427,12 +1427,16 @@ gdb:
|
|||||||
:Tbreak {position}
|
:Tbreak {position}
|
||||||
set a temporary breakpoint at the specified position
|
set a temporary breakpoint at the specified position
|
||||||
*:Clear* delete the breakpoint at the cursor position
|
*:Clear* delete the breakpoint at the cursor position
|
||||||
|
*:ToggleBreak* set a breakpoint at the cursor position or delete all
|
||||||
|
breakpoints at the cursor positoin
|
||||||
|
|
||||||
*:Step* execute the gdb "step" command
|
*:Step* execute the gdb "step" command
|
||||||
*:Over* execute the gdb "next" command (`:Next` is a Vim command)
|
*:Over* execute the gdb "next" command (`:Next` is a Vim command)
|
||||||
*:Until* execute the gdb "until" command
|
*:Until* execute the gdb "until" command
|
||||||
*:Finish* execute the gdb "finish" command
|
*:Finish* execute the gdb "finish" command
|
||||||
*:Continue* execute the gdb "continue" command
|
*:Continue* execute the gdb "continue" command
|
||||||
|
*:RunOrContinue* execute the gdb "continue" command if program is running,
|
||||||
|
otherwise run the program
|
||||||
*:Stop* interrupt the program
|
*:Stop* interrupt the program
|
||||||
|
|
||||||
If 'mouse' is set the plugin adds a window toolbar with these entries:
|
If 'mouse' is set the plugin adds a window toolbar with these entries:
|
||||||
|
@@ -4,7 +4,7 @@ vim9script
|
|||||||
|
|
||||||
# Author: Bram Moolenaar
|
# Author: Bram Moolenaar
|
||||||
# Copyright: Vim license applies, see ":help license"
|
# Copyright: Vim license applies, see ":help license"
|
||||||
# Last Change: 2025 Sep 02
|
# Last Change: 2025 Sep 14
|
||||||
# Converted to Vim9: Ubaldo Tiberi <ubaldo.tiberi@gmail.com>
|
# Converted to Vim9: Ubaldo Tiberi <ubaldo.tiberi@gmail.com>
|
||||||
|
|
||||||
# WORK IN PROGRESS - The basics works stable, more to come
|
# WORK IN PROGRESS - The basics works stable, more to come
|
||||||
@@ -1173,6 +1173,7 @@ def InstallCommands()
|
|||||||
|
|
||||||
command -nargs=? Break SetBreakpoint(<q-args>)
|
command -nargs=? Break SetBreakpoint(<q-args>)
|
||||||
command -nargs=? Tbreak SetBreakpoint(<q-args>, true)
|
command -nargs=? Tbreak SetBreakpoint(<q-args>, true)
|
||||||
|
command ToggleBreak ToggleBreak()
|
||||||
command Clear ClearBreakpoint()
|
command Clear ClearBreakpoint()
|
||||||
command Step SendResumingCommand('-exec-step')
|
command Step SendResumingCommand('-exec-step')
|
||||||
command Over SendResumingCommand('-exec-next')
|
command Over SendResumingCommand('-exec-next')
|
||||||
@@ -1182,6 +1183,7 @@ def InstallCommands()
|
|||||||
command -nargs=* Arguments SendResumingCommand('-exec-arguments ' .. <q-args>)
|
command -nargs=* Arguments SendResumingCommand('-exec-arguments ' .. <q-args>)
|
||||||
command Stop StopCommand()
|
command Stop StopCommand()
|
||||||
command Continue ContinueCommand()
|
command Continue ContinueCommand()
|
||||||
|
command RunOrContinue RunOrContinue()
|
||||||
|
|
||||||
command -nargs=* Frame Frame(<q-args>)
|
command -nargs=* Frame Frame(<q-args>)
|
||||||
command -count=1 Up Up(<count>)
|
command -count=1 Up Up(<count>)
|
||||||
@@ -1296,6 +1298,8 @@ def DeleteCommands()
|
|||||||
delcommand Asm
|
delcommand Asm
|
||||||
delcommand Var
|
delcommand Var
|
||||||
delcommand Winbar
|
delcommand Winbar
|
||||||
|
delcommand RunOrContinue
|
||||||
|
delcommand ToggleBreak
|
||||||
|
|
||||||
|
|
||||||
if !empty(saved_K_map) && !saved_K_map.buffer
|
if !empty(saved_K_map) && !saved_K_map.buffer
|
||||||
@@ -1439,6 +1443,19 @@ def ClearBreakpoint()
|
|||||||
endif
|
endif
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
|
def ToggleBreak()
|
||||||
|
var fname = fnameescape(expand('%:p'))
|
||||||
|
var lnum = line('.')
|
||||||
|
var bploc = printf('%s:%d', fname, lnum)
|
||||||
|
if has_key(breakpoint_locations, bploc)
|
||||||
|
while has_key(breakpoint_locations, bploc)
|
||||||
|
ClearBreakpoint()
|
||||||
|
endwhile
|
||||||
|
else
|
||||||
|
SetBreakpoint("")
|
||||||
|
endif
|
||||||
|
enddef
|
||||||
|
|
||||||
def Run(args: string)
|
def Run(args: string)
|
||||||
if args != ''
|
if args != ''
|
||||||
SendResumingCommand($'-exec-arguments {args}')
|
SendResumingCommand($'-exec-arguments {args}')
|
||||||
@@ -1446,6 +1463,14 @@ def Run(args: string)
|
|||||||
SendResumingCommand('-exec-run')
|
SendResumingCommand('-exec-run')
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
|
def RunOrContinue()
|
||||||
|
if running
|
||||||
|
ContinueCommand()
|
||||||
|
else
|
||||||
|
Run('')
|
||||||
|
endif
|
||||||
|
enddef
|
||||||
|
|
||||||
# :Frame - go to a specific frame in the stack
|
# :Frame - go to a specific frame in the stack
|
||||||
def Frame(arg: string)
|
def Frame(arg: string)
|
||||||
# Note: we explicit do not use mi's command
|
# Note: we explicit do not use mi's command
|
||||||
@@ -2004,7 +2029,10 @@ def HandleNewBreakpoint(msg: string, modifiedFlag: bool)
|
|||||||
if !has_key(breakpoint_locations, bploc)
|
if !has_key(breakpoint_locations, bploc)
|
||||||
breakpoint_locations[bploc] = []
|
breakpoint_locations[bploc] = []
|
||||||
endif
|
endif
|
||||||
breakpoint_locations[bploc] += [id]
|
if breakpoint_locations[bploc]->index(id) == -1
|
||||||
|
# Make sure all ids are unique
|
||||||
|
breakpoint_locations[bploc] += [id]
|
||||||
|
endif
|
||||||
|
|
||||||
var posMsg = ''
|
var posMsg = ''
|
||||||
if bufloaded(fname)
|
if bufloaded(fname)
|
||||||
|
@@ -606,4 +606,87 @@ function Test_termdebug_config_types()
|
|||||||
unlet g:termdebug_config
|
unlet g:termdebug_config
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
func Test_termdebug_toggle_break()
|
||||||
|
let g:test_is_flaky = 1
|
||||||
|
let bin_name = 'XTD_tbreak'
|
||||||
|
let src_name = bin_name .. '.c'
|
||||||
|
|
||||||
|
eval s:generate_files(bin_name)
|
||||||
|
|
||||||
|
execute 'edit ' .. src_name
|
||||||
|
execute 'Termdebug ./' .. bin_name
|
||||||
|
|
||||||
|
call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
|
||||||
|
call WaitForAssert({-> assert_equal(3, winnr('$'))})
|
||||||
|
let gdb_buf = winbufnr(1)
|
||||||
|
wincmd b
|
||||||
|
|
||||||
|
let bp_line = 22 " 'return' statement in main
|
||||||
|
execute "normal! " .. bp_line .. "G"
|
||||||
|
execute "ToggleBreak"
|
||||||
|
|
||||||
|
call term_wait(gdb_buf)
|
||||||
|
redraw!
|
||||||
|
call assert_equal([
|
||||||
|
\ {'lnum': bp_line, 'id': 1014, 'name': 'debugBreakpoint1.0',
|
||||||
|
\ 'priority': 110, 'group': 'TermDebug'}],
|
||||||
|
\ sign_getplaced('', #{group: 'TermDebug'})[0].signs)
|
||||||
|
|
||||||
|
RunOrContinue
|
||||||
|
call term_wait(gdb_buf, 400)
|
||||||
|
redraw!
|
||||||
|
call WaitForAssert({-> assert_equal([
|
||||||
|
\ {'lnum': bp_line, 'id': 12, 'name': 'debugPC', 'priority': 110,
|
||||||
|
\ 'group': 'TermDebug'},
|
||||||
|
\ {'lnum': bp_line, 'id': 1014, 'name': 'debugBreakpoint1.0',
|
||||||
|
\ 'priority': 110, 'group': 'TermDebug'}],
|
||||||
|
\ sign_getplaced('', #{group: 'TermDebug'})[0].signs)})
|
||||||
|
|
||||||
|
" Add one break point
|
||||||
|
execute "normal! " .. bp_line .. "G"
|
||||||
|
execute "ToggleBreak"
|
||||||
|
call term_wait(gdb_buf)
|
||||||
|
redraw!
|
||||||
|
call WaitForAssert({-> assert_equal([
|
||||||
|
\ {'lnum': bp_line, 'id': 12, 'name': 'debugPC', 'priority': 110,
|
||||||
|
\ 'group': 'TermDebug'}],
|
||||||
|
\ sign_getplaced('', #{group: 'TermDebug'})[0].signs)})
|
||||||
|
|
||||||
|
" Remove one break point
|
||||||
|
execute "normal! " .. bp_line .. "G"
|
||||||
|
execute "ToggleBreak"
|
||||||
|
call term_wait(gdb_buf)
|
||||||
|
redraw!
|
||||||
|
call WaitForAssert({-> assert_equal([
|
||||||
|
\ {'lnum': bp_line, 'id': 2014, 'name': 'debugBreakpoint2.0',
|
||||||
|
\ 'priority': 110, 'group': 'TermDebug'},
|
||||||
|
\ {'lnum': bp_line, 'id': 12, 'name': 'debugPC', 'priority': 110,
|
||||||
|
\ 'group': 'TermDebug'}],
|
||||||
|
\ sign_getplaced('', #{group: 'TermDebug'})[0].signs)})
|
||||||
|
|
||||||
|
" Remove multiple break points
|
||||||
|
execute "Break"
|
||||||
|
execute "Break"
|
||||||
|
execute "Break"
|
||||||
|
execute "Break"
|
||||||
|
call term_wait(gdb_buf, 400)
|
||||||
|
execute "ToggleBreak"
|
||||||
|
call term_wait(gdb_buf)
|
||||||
|
redraw!
|
||||||
|
call WaitForAssert({-> assert_equal([
|
||||||
|
\ {'lnum': bp_line, 'id': 12, 'name': 'debugPC', 'priority': 110,
|
||||||
|
\ 'group': 'TermDebug'}],
|
||||||
|
\ sign_getplaced('', #{group: 'TermDebug'})[0].signs)})
|
||||||
|
|
||||||
|
|
||||||
|
wincmd t
|
||||||
|
quit!
|
||||||
|
redraw!
|
||||||
|
call WaitForAssert({-> assert_equal(1, winnr('$'))})
|
||||||
|
call assert_equal([], sign_getplaced('', #{group: 'TermDebug'})[0].signs)
|
||||||
|
|
||||||
|
eval s:cleanup_files(bin_name)
|
||||||
|
%bw!
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -724,6 +724,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1756,
|
||||||
/**/
|
/**/
|
||||||
1755,
|
1755,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user