# 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

# 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