Fast Exception creation with raw backtrace

e$B!!$5$5$@$G$9!%e(B

e$B!!e(BException
e$B%*%V%8%'%/%H$r:n@.$9$k$H$-!$I,$:!VFI$$d$9$$%P%C%/%H%l!<%9!We(B
e$B$r@8@.$7$^$9$,!$;H$o$J$$$H$-$b7k9=$"$j$^$9!%;H$o$J$$>l9g$b!$?M$K!VFI$
$de(B
e$B$9$$%P%C%/%H%l!<%9!W$r:n@.$9$k$N$OL5BL$@$J$H9M$($^$7$?!%e(B

e$BFI$_$d$9$$%P%C%/%H%l!<%9!'e(Bcaller e$B%a%=%C%I$G<h$j=P$;$k%"%le(B

e$B!!$=$3$G!$Nc30%%V%8%'%/%H@8@.;~$K$O!VFI$_$d$9$$%P%C%/%H%l!<%9!W$r@8@.$9e(B
e$B$k$N$KI,MW$J>pJs$@$1$r;}$C$F$
$-!$K\Ev$K!VFI$_$d$9$$%P%C%/%H%l!<%9!W$rI,e(B
e$BMW$H$7$?$H$-$K=i$a$F:n$k!$$H$$$&$h$&$K$7$^$7$?!%e(B

e$B!!0J2<$N%Z!<%8$KI>2A7k2L$r=q$-$^$7$?!%$=$l$J$j$K8z2L$,$"$k$h$&$G$9!%e(B
http://www.atdot.net/~ko1/diary/protect/201003.html#d10

e$B!!$J$k$Y$/8_49@-$rJx$5$J$$$h$&$K:n$C$?$N$G$9$,!$0lE@Hs8_49$,$"$j$^$7$F!$e(B
e$B:#$^$G$ONc30@8@.;~$Ke(B Exception#set_backtrace
e$B$r$h$s$G$$$?$N$G$9$,!$$3$le(B
e$B$r8F$P$J$/$J$j$^$9!%e(B

e$B!!%G%U%)%k%H$G$OLdBjL5$$$H;W$&$N$G$9$,!$e(BException#set_backtrace
e$B$,:FDj5Ae(B
e$B$5$l$F$$$k$HLdBj$K$J$k$+$b$7$l$^$;$s!%$,!$$=$&$$$&MQES$,$"$k$+$O$h$/$o$+e(B
e$B$j$^$;$s!%e(B

e$B!!$5$F!$F~$l$F$b$$$$$b$N$G$7$g$&$+!%e(B

e$B!!$A$J$_$K!$e(Btest-all
e$B$G$O<:GT$,A}$($A$c$C$?$N$G!$$^$@%G%P%C%0$7$^$9!%e(B

e$BA0!'e(B7039 tests, 2169277 assertions, 5 failures, 3 errors, 0 skips
e$B8e!'e(B7039 tests, 2169213 assertions, 15 failures, 12 errors, 0
skips

e$B6a1J$H?=$7$^$9!#e(B

e$B!!$=$3$G!$Nc30%%V%8%'%/%H@8@.;~$K$O!VFI$_$d$9$$%P%C%/%H%l!<%9!W$r@8@.$9e(B
e$B$k$N$KI,MW$J>pJs$@$1$r;}$C$F$
$-!$K\Ev$K!VFI$_$d$9$$%P%C%/%H%l!<%9!W$rI,e(B
e$BMW$H$7$?$H$-$K=i$a$F:n$k!$$H$$$&$h$&$K$7$^$7$?!%e(B
e$B9bB.$K$J$k$N$O4r$7$$$G$9!#e(B
e$B$?$@e(B dRuby
e$B7PM3$N%a%=%C%I8F$S=P$7$GNc30$rJV$9;~$K!“e(BException e$B$,e(B
Masrhal e$B$G$-$J$$$He(B DRbRemoteError
e$B$KJQ49$5$l$F$7$^$&$N$G!”:$$ke(B
e$B$3$H$,$"$j$=$&$G$9!#e(B

set_backtrace e$B$G!VFI$$d$9$$%P%C%/%H%l!<%9!W$,%;%C%H$5$l$?$ie(B
Marshal
e$B2DG=$K$J$k$H$+!"!X!VFI$
$d$9$$%P%C%/%H%l!<%9!W$r@8@.$9$k$N$Ke(B
e$BI,MW$J>pJs!Y$NItJ,$,%*%V%8%'%/%H$K$J$C$F$F!“$=$3$@$1e(B DRbObject
e$B$Ge(B
e$B;2>HEO$7$G$-$k$J$I2sHrJ}K!$,$”$l$P$$$$$H;W$$$^$9!#e(B

dRuby e$B7PM3$G!"FC$K%a%=%C%I8F$S=P$7$N?<$$0LCV$G$NNc30$,CY$$$N$re(B

e$B;~!946$8$F$$$k$N$G!"$G$-$?$i8e<T$@$H4r$7$$$G$9!#e(B

e$B!!0J2<$N%Z!<%8$KI>2A7k2L$r=q$-$^$7$?!%$=$l$J$j$K8z2L$,$"$k$h$&$G$9!%e(B
http://www.atdot.net/~ko1/diary/protect/201003.html#d10
e$B$3$Ne(B URL e$B$@$H%Q%9%o!<%I$rMW5a$5$l$^$7$?!#e(B
e$BB?J,$3$C$A$G$9$h$M!#e(B
だいありー

e$B!!%G%U%)%k%H$G$OLdBjL5$$$H;W$&$N$G$9$,!$e(BException#set_backtrace e$B$,:FDj5Ae(B
e$B$5$l$F$$$k$HLdBj$K$J$k$+$b$7$l$^$;$s!%$,!$$=$&$$$&MQES$,$“$k$+$O$h$/$o$+e(B
e$B$j$^$;$s!%e(B
e$B:FDj5A$5$l$F$$$kNc$K$O?4Ev$?$j$”$j$^$;$s$,!“Nc30$N%/%i%9$re(B
e$BESCf$G@Z$jBX$($D$D%P%C%/%H%l!<%9$O85$NNc30$N$b$N$K$9$k$H$$$&$3$H$re(B
e$B0J2<$N$h$&$K$7$F$$$k$3$H$,$”$j$^$9!#e(B

begin

rescue HogeError
raise FooError, “msg: #{$!.message}”, $@

e$B$^$?$Oe(B

err = FooError.new(“msg: #{$!.message}”)
err.set_backtrace($@)
raise err
end

e$B$3$&$9$k$H$3$N;~$K0lC6!VFI$_$d$9$$%P%C%/%H%l!<%9!W$,@8@.$5$l$Fe(B
e$B$=$l$r%;%C%H$9$k$3$H$K$J$k$H;W$$$^$9$N$G!“!V85$NI,MW$J>pJs!W$@$1$re(B
e$B0z$-7Q$0J}K!$,$”$l$PL5BL$,$J$/$F$$$$$J!<!“$H$O;W$$$^$9!#e(B
e$B$?$@0c$&=q$-J}$r$7$J$$$H$$$1$J$/$J$k$H;W$&$N$G!”$=$N287C$Ke(B
e$B$"$:$+$k$K$O%9%/%j%W%H$r=q$-BX$($J$$$H$$$1$^$;$s$1$I!#e(B

e$B0J>e!#e(B

Chikanaga Tomoyuki
[email protected]

e$B!!$5$5$@$G$9!%e(B

(2010/03/10 10:11), Tomoyuki C. wrote::

e$B$?$@e(B dRuby e$B7PM3$N%a%=%C%I8F$S=P$7$GNc30$rJV$9;~$K!“e(BException e$B$,e(B
Masrhal e$B$G$-$J$$$He(B DRbRemoteError e$B$KJQ49$5$l$F$7$^$&$N$G!”:$$ke(B
e$B$3$H$,$"$j$=$&$G$9!#e(B

e$B!!e(BMarshal e$B$O=PMh$k$h$&$K$7$h$&$H;W$C$F$*$j$^$9!%e(B

set_backtrace e$B$G!VFI$$d$9$$%P%C%/%H%l!<%9!W$,%;%C%H$5$l$?$ie(B
Marshal e$B2DG=$K$J$k$H$+!"!X!VFI$
$d$9$$%P%C%/%H%l!<%9!W$r@8@.$9$k$N$Ke(B
e$BI,MW$J>pJs!Y$NItJ,$,%*%V%8%'%/%H$K$J$C$F$F!“$=$3$@$1e(B DRbObject e$B$Ge(B
e$B;2>HEO$7$G$-$k$J$I2sHrJ}K!$,$”$l$P$$$$$H;W$$$^$9!#e(B

e$B!!N>J}$N%"%W%m!<%A$H$7$h$&$H;W$$$^$9!%e(B

e$B!!$D$^$j!$e(Bset_backtrace(Array)
e$B$G@_Dj$b=PMh$k$7!$2?$b$7$J$/$F$b!$:#$^$Ge(B
e$BDL$j$Ke(B Marshal e$B2DG=$K$7$h$&$H;W$$$^$9!%e(B

e$BB?J,$3$C$A$G$9$h$M!#e(B
だいありー

e$B!!$=$&$G$9!%BgJQ4VH4$1$J$3$H$r$7$F$7$^$$$^$7$?!%<:Ni$7$^$7$?!%e(B

raise FooError, “msg: #{$!.message}”, $@
e$B$“$:$+$k$K$O%9%/%j%W%H$r=q$-BX$($J$$$H$$$1$^$;$s$1$I!#e(B
e$B!!$^$!!$FC<l%1!<%9$@$H;W$$$^$9$N$G!$287C$K$”$:$+$l$J$$$1$I$-$A$s$HF0$/e(B
e$B$h!$$H$$$&$h$&$K$7$h$&$H;W$$$^$9!%e(B