# -*- shell-script -*-
# condition.sh - gdb-like "condition" debugger command
#
# Copyright (C) 2002-2006, 2008, 2009, 2011, 2016
# Rocky Bernstein rocky@gnu.org
#
# This program 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.
#
# This program 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 this program; see the file COPYING. If not, write to
# the Free Software Foundation, 59 Temple Place, Suite 330, Boston,
# MA 02111 USA.
_Dbg_help_add condition \
"**condition** *bp_number* *zsh-cond*
+Break only if *bassh-cond* is true in breakpoint number *bp_number*.
*bp_number* is an integer and *cond* is an zsh expression to be evaluated whenever
breakpoint *bp_number* is reached.
Examples:
---------
condition 5 x > 10 # Breakpoint 5 now has condition x > 10
condition 5 # Remove above condition
See also:
---------
*break*, *tbreak*.
" 1 _Dbg_complete_brkpt_range
# Set a condition for a given breakpoint $1 is a breakpoint number
# $2 is a condition. If not given, set "unconditional" or 1.
# returns 0 if success or 1 if fail.
function _Dbg_do_condition {
if (( $# < 1 )) ; then
_Dbg_errmsg 'condition: Argument required (breakpoint number).'
return 1
fi
typeset -r n=$1
shift
eval "$_seteglob"
if [[ $n != $int_pat ]]; then
eval "$_resteglob"
_Dbg_errmsg "condition: Bad breakpoint number: $n"
return 2
fi
eval "$_resteglob"
if [[ -z ${_Dbg_brkpt_file[$n]} ]] ; then
_Dbg_msg "condition: Breakpoint entry $n is not set. Condition not changed."
return 3
fi
if [[ -z $condition ]] ; then
condition=1
_Dbg_msg "Breakpoint $n now unconditional."
fi
_Dbg_brkpt_cond[$n]="$condition"
return 0
}