1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
# -*- shell-script -*-
# quit.sh - gdb-like "quit" debugger command
#
# Copyright (C) 2008 Rocky Bernstein rocky@gnu.org
#
# zshdb is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2, or (at your option) any later
# version.
#
# zshdb is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with zshdb; see the file COPYING. If not, write to the Free Software
# Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
_Dbg_help_add quit \
'quit [EXIT-CODE [SHELL-LEVELS]] -- Quit the debugger.
The program being debugged is aborted. If EXIT-CODE is given that
will be the exit return code. If SHELL-LEVELS then up to that many
nested shells are quit. However to be effective, the last of those
shells should have been run under the debugger.
See also "finish", "return" and "restart".'
function _Dbg_do_quit {
typeset -i return_code=${1:-$_Dbg_program_exit_code}
typeset -i desired_quit_levels=${2:-0}
if [[ $desired_quit_levels != [0-9]* ]] ; then
_Dbg_errmsg "Argument ($desired_quit_levels) should be a number or nothing."
return 0
fi
if (( desired_quit_levels == 0 \
|| desired_quit_levels > ZSH_SUBSHELL+1)) ; then
((desired_quit_levels=ZSH_SUBSHELL+1))
fi
((_Dbg_QUIT_LEVELS+=desired_quit_levels))
# Reduce the number of recorded levels that we need to leave by
# if _Dbg_QUIT_LEVELS is greater than 0.
((_Dbg_QUIT_LEVELS--))
## write this to the next level up can read it.
_Dbg_write_journal "_Dbg_QUIT_LEVELS=$_Dbg_QUIT_LEVELS"
_Dbg_write_journal "_Dbg_step_ignore=$_Dbg_step_ignore"
# Reset signal handlers to their default but only if
# we are not in a subshell.
if (( ZSH_SUBSHELL == 0 )) ; then
# If we were told to restart from deep down, restart instead of quit.
if [ -n "$_Dbg_RESTART_COMMAND" ] ; then
_Dbg_erase_journals
_Dbg_save_state
exec $_Dbg_RESTART_COMMAND
fi
_Dbg_cleanup
fi
# And just when you thought we'd never get around to it...
exit $return_code
}
_Dbg_alias_add q quit
_Dbg_alias_add exit quit
|