# Defining {file,line,name} methods for each backtrace entry

**URL:** <https://www.ruby-forum.com/t/defining-file-line-name-methods-for-each-backtrace-entry/174548>\
**Category:** Development\
**Created:** [August 28, 2009, 2:05pm UTC](https://www.ruby-forum.com/t/defining-file-line-name-methods-for-each-backtrace-entry/174548 "2009-08-28T14:05:10Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Akinori\_MUSHA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b782af/32.png) [@Akinori\_MUSHA](https://www.ruby-forum.com/u/Akinori_MUSHA)\
**Post date:** [August 28, 2009, 2:05pm UTC](https://www.ruby-forum.com/t/defining-file-line-name-methods-for-each-backtrace-entry/174548/1 "2009-08-28T14:05:10Z")

</div>

ã€€ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã®å„è¡Œã¯æ•´å½¢æ¸ˆã¿æ–‡å­—åˆ—ã«ãªã£ã¦ã„ã¾ã™ãŒã€ãã‚Œã‚’  
ã¾ãŸãƒ‘ãƒ¼ã‚¹ã—ã¦åˆ‡ã‚Šå‡ºã™ã‚ˆã†ãªå‡¦ç†ãŒã©ã†ã«ã‚‚è¦‹ã¦ã„ã‚‰ã‚Œã¾ã›ã‚“ã€‚  
{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;  
}

---

<div class="post-metadata">

**Author:** ![Akinori\_MUSHA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b782af/32.png) [@Akinori\_MUSHA](https://www.ruby-forum.com/u/Akinori_MUSHA)\
**Post date:** [August 28, 2009, 2:32pm UTC](https://www.ruby-forum.com/t/defining-file-line-name-methods-for-each-backtrace-entry/174548/2 "2009-08-28T14:32:06Z")

</div>

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”  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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

---

<div class="post-metadata">

**Author:** ![Akinori\_MUSHA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b782af/32.png) [@Akinori\_MUSHA](https://www.ruby-forum.com/u/Akinori_MUSHA)\
**Post date:** [August 28, 2009, 3:12pm UTC](https://www.ruby-forum.com/t/defining-file-line-name-methods-for-each-backtrace-entry/174548/3 "2009-08-28T15:12:29Z")

</div>

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 ã‚‚å–ã‚Œã‚‹ã¨ã‹â€¦ã€‚

---

<div class="post-metadata">

**Author:** ![Akinori\_MUSHA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b782af/32.png) [@Akinori\_MUSHA](https://www.ruby-forum.com/u/Akinori_MUSHA)\
**Post date:** [August 28, 2009, 3:12pm UTC](https://www.ruby-forum.com/t/defining-file-line-name-methods-for-each-backtrace-entry/174548/4 "2009-08-28T15:12:29Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Akinori\_MUSHA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b782af/32.png) [@Akinori\_MUSHA](https://www.ruby-forum.com/u/Akinori_MUSHA)\
**Post date:** [August 28, 2009, 3:56pm UTC](https://www.ruby-forum.com/t/defining-file-line-name-methods-for-each-backtrace-entry/174548/5 "2009-08-28T15:56:59Z")

</div>

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 [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
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
