From 6559430fb75e921622f34d04049b2dfd46006ea8 Mon Sep 17 00:00:00 2001 From: nagai Date: Thu, 16 Oct 2003 14:53:47 +0000 Subject: [PATCH] If $DEBUG == true and some exception is caused in a callback operation, Ruby/Tk shows a (verbose) backtrace information on the callback process. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4787 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ ext/tk/lib/tk.rb | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 59bfaddc1d..5e79eb0dd6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Thu Oct 16 23:51:04 2003 Hidetoshi NAGAI + + * ext/tk/lib/tk.rb: If $DEBUG == true and some exception is caused + in a callback operation, Ruby/Tk shows a (verbose) backtrace + information on the callback process. + Thu Oct 16 16:54:57 2003 Yukihiro Matsumoto * string.c (rb_str_upto): ("a"..."a").to_a should return []. diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb index e904278b25..0394611172 100644 --- a/ext/tk/lib/tk.rb +++ b/ext/tk/lib/tk.rb @@ -772,7 +772,23 @@ module TkCore #_get_eval_string(TkUtil.eval_cmd(TkCore::INTERP.tk_cmd_tbl[arg.shift], # *arg)) cb_obj = TkCore::INTERP.tk_cmd_tbl[arg.shift] - cb_obj.call(*arg) + unless $DEBUG + cb_obj.call(*arg) + else + begin + raise 'check backtrace' + rescue + # ignore backtrace before 'callback' + pos = -($!.backtrace.size) + end + begin + cb_obj.call(*arg) + rescue + trace = $!.backtrace + raise $!, "\n#{trace[0]}: #{$!.message} (#{$!.class})\n" + + "\tfrom #{trace[1..pos].join("\n\tfrom ")}" + end + end end def load_cmd_on_ip(tk_cmd)