2012-03-06 4 views
0

я следовать этому руководству, чтобы наклониться использовать bashdb: http://archive09.linux.com/articles/153383.html#commentthis И когда я использую bashdb для бть сценарий:как сделать точку останова работы в bashdb

#!/bin/bash 

version="0.01"; 

fibonacci() { 
    n=${1:?If you want the nth fibonacci number, you must supply n as the first parameter.} 
    if [ $n -le 1 ]; then 
    echo $n 
    else 
    l=`fibonacci $((n-1))` 
    r=`fibonacci $((n-2))` 
    echo $((l + r)) 
    fi 
} 

for i in `seq 1 10` 
do 
    result=$(fibonacci $i) 
    echo "i=$i result=$result" 
done 

А вот деталь отладка: kaiwii @ убунт: ~/shell_test $ Баш --debugger ./fibonacci.sh bashdb отладчик, релиз 4.2-0.6

Copyright 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010 Rocky Bernstein 
This is free software, covered by the GNU General Public License, and you are 
welcome to change it and/or distribute copies of it under certain conditions. 

(/home/kaiwii/shell_test/fibonacci.sh:3): 
3: version="0.01"; 
bashdb<0> bt 
->0 in file `./fibonacci.sh' at line 3 
##1 main() called from file `./fibonacci.sh' at line 0 
bashdb<1> next 
(/home/kaiwii/shell_test/fibonacci.sh:16): 
16: for i in `seq 1 10` 
bashdb<2> list 
11:  r=`fibonacci $((n-2))` 
12:  echo $((l + r)) 
13:  fi 
14: } 
15:  
16: => for i in `seq 1 10` 
17: do 
18:  result=$(fibonacci $i) 
19:  echo "i=$i result=$result" 
20: done 
bashdb<3> next 
(/home/kaiwii/shell_test/fibonacci.sh:18): 
18: result=$(fibonacci $i) 
bashdb<4> break fibonacci 
Breakpoint 1 set in file /home/kaiwii/shell_test/fibonacci.sh, line 5. 
bashdb<5> continue 
i=1 result=1 
i=2 result=1 
i=3 result=2 
i=4 result=3 
i=5 result=5 
i=6 result=8 
i=7 result=13 
i=8 result=21 
i=9 result=34 
i=10 result=55 

И мой вопрос, когда я использую команду, продолжить после ц петь команду, ломать fibonacci , она останавливается в начале метода, фибоначчи, но вместо этого выходит из сценария.

ответ

3

Это ошибка в bashdb (версия 4.2-0.8 и ниже) при обработке команды «break».

Команда «next» устанавливает флаг, который сообщает bash, чтобы пропускать функции, а команда «break» не очищает это.

git sources есть исправление, поэтому, если вы можете использовать это, это один из способов получить исправление.

Другой способ найти, где установлен bashdb/lib/break.sh (скажем, это в /usr/share/lib/bashdb/lib/break.sh) и с патчем ниже сохраненного в /tmp/bashdb.patch

--- bashdb/lib/break.sh 
+++ bashdb/lib/break.sh 
@@ -218,6 +218,11 @@ _Dbg_set_brkpt() { 
    typeset dq_source_file 
    dq_source_file=$(_Dbg_esc_dq "$source_file") 
    typeset dq_condition=$(_Dbg_esc_dq "$condition") 
+ 
+ # Make sure we are not skipping over functions. 
+ _Dbg_old_set_opts="$_Dbg_old_set_opts -o functrace" 
+ _Dbg_write_journal_eval "_Dbg_old_set_opts='$_Dbg_old_set_opts'" 
+ 
    _Dbg_write_journal_eval "_Dbg_brkpt_line[$_Dbg_brkpt_max]=$lineno" 
    _Dbg_write_journal_eval "_Dbg_brkpt_file[$_Dbg_brkpt_max]=\"$dq_source_file\"" 
    _Dbg_write_journal "_Dbg_brkpt_cond[$_Dbg_brkpt_max]=\"$dq_condition\"" 

, а затем запустить как корень:

# cd /usr/share/lib 
# patch -p0 < /tmp/bashdb.patch 
+0

я стараюсь второй путь, но патч подскажет такую ​​ошибку, например: kaiwii @ ubuntu:/usr/share/bashdb/lib $ sudo patch -p0

+1

Патч должен быть понятным - есть некоторые строки, которые добавляются. Найдите файл, отредактируйте его и добавьте строки. Для вас я также вынужден добавить: сохранить файл после его редактирования. – rocky

Смежные вопросы