ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã®å„è¡Œã¯æ•´å½¢æ¸ˆã¿æ–‡å—列ã«ãªã£ã¦ã„ã¾ã™ãŒã€ãれを
ã¾ãŸãƒ‘ースã—ã¦åˆ‡ã‚Šå‡ºã™ã‚ˆã†ãªå‡¦ç†ãŒã©ã†ã«ã‚‚見ã¦ã„られã¾ã›ã‚“。
{file,line,name} ã®ã‚ˆã†ãªã‚¢ã‚¯ã‚»ã‚µãƒ¼ã‚’用æ„ã—ã¾ã›ã‚“ã‹ï¼Ÿ
 以下ã¯ãƒ™ã‚¿ãªå®Ÿè£…ã§ã™ã€‚
Index: vm.c
— vm.c (revision 24692)
+++ vm.c (working copy)
@@ -742,6 +742,24 @@ vm_backtrace_each(rb_thread_t *th, int l
return Qtrue;
}
+static VALUE
+rb_backtrace_trace_file(VALUE obj)
+{
- return rb_iv_get(obj, “@file”);
+}
-
+static VALUE
+rb_backtrace_trace_line(VALUE obj)
+{
- return rb_iv_get(obj, “@line”);
+}
-
+static VALUE
+rb_backtrace_trace_name(VALUE obj)
+{
- return rb_iv_get(obj, “@name”);
+}
-
static int
vm_backtrace_push(void *arg, VALUE file, int line_no, VALUE name)
{
@@ -753,6 +771,12 @@ vm_backtrace_push(void *arg, VALUE file,
}
bt = rb_enc_sprintf(rb_enc_compatible(file, name), “%s:%d:in `%s’”,
RSTRING_PTR(file), line_no, RSTRING_PTR(name));
- rb_iv_set(bt, “@file”, file);
- rb_iv_set(bt, “@line”, INT2FIX(line_no));
- rb_iv_set(bt, “@name”, name);
- rb_define_singleton_method(bt, “file”, rb_backtrace_trace_file, 0);
- rb_define_singleton_method(bt, “line”, rb_backtrace_trace_line, 0);
- rb_define_singleton_method(bt, “name”, rb_backtrace_trace_name, 0);
rb_ary_push(*aryp, bt);
return 0;
}
e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B
In message “Re: [ruby-dev:39183] defining {file,line,name} methods for
each backtrace entry”
on Fri, 28 Aug 2009 21:04:46 +0900, “Akinori MUSHA”
[email protected] writes:
|e$B!!%P%C%/%H%l!<%9$N3F9T$O@07A:Q$_J8;zNs$K$J$C$F$$$^$9$,!“$=$l$re(B
|e$B$^$?%Q!<%9$7$F@Z$j=P$9$h$&$J=hM}$,$I$&$K$b8+$F$$$i$l$^$;$s!#e(B
|{file,line,name} e$B$N$h$&$J%”%/%;%5!<$rMQ0U$7$^$;$s$+!)e(B
|
|e$B!!0J2<$O%Y%?$J<BAu$G$9!#e(B
e$B$$$$$s$8$c$J$$$G$7$g$&$+!#<BAu$O%b%8%e!<%k$r:n$C$Fe(Bextende$B$9e(B
e$B$k$N$O$I$&$G$7$g$&!#<c43$@$,8zN($,NI$$$O$:$G$9!#e(B
At Fri, 28 Aug 2009 21:41:10 +0900,
SASADA Koichi wrote:
Yukihiro M. wrote::
| ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã®å„è¡Œã¯æ•´å½¢æ¸ˆã¿æ–‡å—列ã«ãªã£ã¦ã„ã¾ã™ãŒã€ãれを
|ã¾ãŸãƒ‘ースã—ã¦åˆ‡ã‚Šå‡ºã™ã‚ˆã†ãªå‡¦ç†ãŒã©ã†ã«ã‚‚見ã¦ã„られã¾ã›ã‚“。
|{file,line,name} ã®ã‚ˆã†ãªã‚¢ã‚¯ã‚»ã‚µãƒ¼ã‚’用æ„ã—ã¾ã›ã‚“ã‹ï¼Ÿ
|
| 以下ã¯ãƒ™ã‚¿ãªå®Ÿè£…ã§ã™ã€‚
ã„ã„ã‚“ã˜ã‚ƒãªã„ã§ã—ょã†ã‹ã€‚実装ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作ã£ã¦extendã™
ã‚‹ã®ã¯ã©ã†ã§ã—ょã†ã€‚若干ã ãŒåŠ¹çŽ‡ãŒè‰¯ã„ã¯ãšã§ã™ã€‚
 ã¯ã„ã€å…ˆã®ãƒ‘ッãƒã¯åŠ¹çŽ‡åº¦å¤–視ã®è—人形ãªã®ã§ã€ã‚ˆã‚Šã‚ˆã„実装ã®è©±ã«
ãªã‚‹ã®ã¯æ“è¿Žã§ã™ã€‚機能やメソッドåã«é–¢ã—ã¦ç•°è«–ã¯ãªã„ã§ã—ょã†ã‹ã€‚
#name ã¯ã¡ã‚‡ã£ã¨æ›–昧ã§ã™ãŒã€ #method ã ã¨æ¨™æº–メソッドã¨ã‹ã¶ã£ã¦
ã—ã¾ã†ã®ã§ã€4æ–‡å—ã§æƒã†ã“ã¨ã‚‚ã‚ã‚Šã“ã‚Œã§ã„ã„ã‹ãªã¨æ€ã„ã¾ã—ãŸã€‚
 backtrace ã¯ä¾‹å¤–ãŒç™ºç”Ÿã™ã‚‹ãŸã³ã«å¾‹å„€ã«ä½œã‚‹ã®ã§ï¼ŒåŠ¹çŽ‡ã®ç‚¹ã§ã¡ã‚‡ã£ã¨å¿ƒé…
ã§ã™ï¼Žæ–‡å—列をパースã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã«ã™ã‚‹ã¨ã‹ãŒå¯¾æ¡ˆã§ã—ょã†ã‹ï¼Ž
 効率を考ãˆã‚‹ã¨ã€ãŸã¶ã‚“ file, line, name ã‚’æŒã¡ to_str ã‚’å‚™ãˆã‚‹
オブジェクトã«ã™ã‚‹ã®ãŒã„ã„æ°—ãŒã—ã¾ã™ã€‚(整形㯠to_str ã¾ã§é…延)
 ç§è¦‹ã§ã™ãŒï¼Œã“ã†ã„ã†ã“ã¨ã‚’ã—ãŸã„ã®ãªã‚‰ï¼Œbacktrace æ–‡å—列を無ç†çŸ¢ç†æ‹¡å¼µ
ã™ã‚‹ã‚“ã˜ã‚ƒãªãã¦ï¼Œåˆ¥ã®ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹å–å¾—ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’è¿½åŠ ã™ã‚‹ã»ã†ãŒ
ã„ã„よã†ãªæ°—ãŒã™ã‚‹ã‚“ã§ã™ãŒï¼Œã©ã†ã§ã—ょã†ã‹ï¼Ž
 ãŠã€å…·ä½“çš„ã«ã¯ã©ã†ã„ã†ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã§ã—ょã†ã‹ã€‚メソッドãŒ
åå‰ã§ãªãオブジェクトã§å–れるã¨ã‹ã€ binding ã‚‚å–れるã¨ã‹â€¦ã€‚
e$B!!$5$5$@$G$9!%e(B
Yukihiro M. wrote::
|e$B!!%P%C%/%H%l!<%9$N3F9T$O@07A:Q$_J8;zNs$K$J$C$F$$$^$9$,!"$=$l$re(B
|e$B$^$?%Q!<%9$7$F@Z$j=P$9$h$&$J=hM}$,$I$&$K$b8+$F$$$i$l$^$;$s!#e(B
|{file,line,name} e$B$N$h$&$J%"%/%;%5!<$rMQ0U$7$^$;$s$+!)e(B
|
|e$B!!0J2<$O%Y%?$J<BAu$G$9!#e(B
e$B$$$$$s$8$c$J$$$G$7$g$&$+!#<BAu$O%b%8%e!<%k$r:n$C$Fe(Bextende$B$9e(B
e$B$k$N$O$I$&$G$7$g$&!#<c43$@$,8zN($,NI$$$O$:$G$9!#e(B
e$B!!e(Bbacktrace
e$B$ONc30$,H/@8$9$k$?$S$KN’57$K:n$k$N$G!$8zN($NE@$G$A$g$C$H?4G[e(B
e$B$G$9!%J8;zNs$r%Q!<%9$9$k%a%=%C%I$K$9$k$H$+$,BP0F$G$7$g$&$+!%e(B
e$B!!;d8+$G$9$,!$$3$&$$$&$3$H$r$7$?$$$N$J$i!$e(Bbacktrace
e$BJ8;zNs$rL5M}LpM}3HD%e(B
e$B$9$k$s$8$c$J$/$F!$JL$N%P%C%/%H%l!<%9<hF@%$%s%?!<%U%’!<%9$rDI2C$9$k$[$&$,e(B
e$B$$$$$h$&$J5$$,$9$k$s$G$9$,!$$I$&$G$7$g$&$+!%e(B
e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B
In message “Re: [ruby-dev:39186] Re: defining {file,line,name} methods
for each backtrace entry”
on Fri, 28 Aug 2009 21:41:10 +0900, SASADA Koichi [email protected]
writes:
|e$B!!e(Bbacktrace e$B$ONc30$,H/@8$9$k$?$S$KN’57$K:n$k$N$G!$8zN($NE@$G$A$g$C$H?4G[e(B
|e$B$G$9!%J8;zNs$r%Q!<%9$9$k%a%=%C%I$K$9$k$H$+$,BP0F$G$7$g$&$+!%e(B
e$B$=$&$G$9$M$(!#CY1d$7$?$$$H$O;W$C$F$$$k$N$G$9$,!“$J$+$J$+LLE]e(B
e$B$J$N$GJ|CV$7$F$^$9!#$I$&$9$k$N$,$h$$$+$J$”!#e(B
|e$B!!;d8+$G$9$,!$$3$&$$$&$3$H$r$7$?$$$N$J$i!$e(Bbacktrace e$BJ8;zNs$rL5M}LpM}3HD%e(B
|e$B$9$k$s$8$c$J$/$F!$JL$N%P%C%/%H%l!<%9<hF@%$%s%?!<%U%'!<%9$rDI2C$9$k$[$&$,e(B
|e$B$$$$$h$&$J5$$,$9$k$s$G$9$,!$$I$&$G$7$g$&$+!%e(B
e$B$=$N!VJL$N%P%C%/%H%l!<%9<hF@%$%s%?!<%U%'!<%9!W$N%G%6%$%s$K$h$Ce(B
e$B$F$O%"%j$@$H;W$$$^$9!#e(B