[#30872] segv when reentering into Fiber with callcc — sheepman <sheepman@...>

こんばんは、sheepman です。

15 messages 2007/06/01
[#30899] Re: segv when reentering into Fiber with callcc — SASADA Koichi <ko1@...> 2007/06/06

 ささだです。

[#30905] Re: segv when reentering into Fiber with callcc — "Yusuke ENDOH" <mame@...> 2007/06/06

遠藤と申します。

[#30906] Re: segv when reentering into Fiber with callcc — SASADA Koichi <ko1@...> 2007/06/06

 ささだです。

[#30929] secrand.rb — "NAKAMURA, Hiroshi" <nakahiro@...>

-----BEGIN PGP SIGNED MESSAGE-----

51 messages 2007/06/08
[#30930] Re: secrand.rb — Tanaka Akira <akr@...> 2007/06/08

In article <4669066C.2080307@sarion.co.jp>,

[#30934] Re: secrand.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/06/08

-----BEGIN PGP SIGNED MESSAGE-----

[#30935] Re: secrand.rb — Tanaka Akira <akr@...> 2007/06/08

In article <46694461.4060706@sarion.co.jp>,

[#30936] Re: secrand.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/06/08

-----BEGIN PGP SIGNED MESSAGE-----

[#30938] Re: secrand.rb — Tanaka Akira <akr@...> 2007/06/08

In article <46697C0B.8060402@sarion.co.jp>,

[#30939] Re: secrand.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/06/08

-----BEGIN PGP SIGNED MESSAGE-----

[#30940] Re: secrand.rb — Tanaka Akira <akr@...> 2007/06/08

In article <4669DAB0.4050705@sarion.co.jp>,

[#30944] Re: secrand.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/06/09

-----BEGIN PGP SIGNED MESSAGE-----

[#30945] Re: secrand.rb — Tanaka Akira <akr@...> 2007/06/09

In article <466AA73C.9030407@sarion.co.jp>,

[#30946] Re: secrand.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/06/09

-----BEGIN PGP SIGNED MESSAGE-----

[#30950] Re: secrand.rb — Nobuyoshi Nakada <nobu@...> 2007/06/11

なかだです。

[#31173] Re: Random — Tanaka Akira <akr@...> 2007/07/10

In article <469253E9.9010203@sarion.co.jp>,

[#31174] Re: Random — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/07/10

-----BEGIN PGP SIGNED MESSAGE-----

[#31178] Re: Random — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/07/11

-----BEGIN PGP SIGNED MESSAGE-----

[#31179] Re: Random — Tanaka Akira <akr@...> 2007/07/11

In article <4694338C.7090303@sarion.co.jp>,

[#31183] Re: Random — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/07/11

-----BEGIN PGP SIGNED MESSAGE-----

[#30971] Linux/ia64で'ucontext_t' undeclared — akira yamada / やまだあきら <akira@...>

最近のRuby 1.9をLinux/ia64上でmakeしようとすると

16 messages 2007/06/13
[#30973] Re: Linux/ia64で'ucontext_t' undeclared — Yukihiro Matsumoto <matz@...> 2007/06/13

まつもと ゆきひろです

[#30974] Re: Linux/ia64で'ucontext_t' undeclared — akira@... 2007/06/13

Yukihiro Matsumoto さんは書きました:

[#30975] Re: Linux/ia64で'ucontext_t' undeclared — Yukihiro Matsumoto <matz@...> 2007/06/13

まつもと ゆきひろです

[ruby-dev:31014] full stack trace on exception

From: Tanaka Akira <akr@...>
Date: 2007-06-17 08:31:42 UTC
List: ruby-dev #31014
Ruby は例外が捕捉されない場合、スタックトレースを表示してく
れますが、そのとき、... 6 levels... などと途中を省略してくれ
ます。

% ./ruby -e 'def m(n) if n == 0 then raise else m(n-1) end end
m(16)'
-e:1:in `raise': unhandled exception
        from -e:1:in `m'
        from -e:1:in `m'
        from -e:1:in `m'
        from -e:1:in `m'
        from -e:1:in `m'
        from -e:1:in `m'
        from -e:1:in `m'
        from -e:1:in `m'
         ... 6 levels...
        from -e:1:in `m'
        from -e:1:in `m'
        from -e:1:in `m'
        from -e:2:in `<main>'

これは、無限再帰でスタックトレースがとんでもなく長くなった場
合にはありがたいのですが、必要な情報が隠れてしまうこともあり
ます。

そのため、全部表示してほしいという要求が出てきて、ちょっと調
べただけでも
[ruby-talk:56054], [ruby-talk:75008], [ruby-list:38810], [ruby-talk:86343], 
[ruby-talk:115962], [ruby-talk:159209], [ruby-core:6572], [ruby-talk:187642]
で問題提起がなされています。

で、思ったのですが、発生した例外が SystemStackError でないと
きは全部出すのはどうでしょうか。

Index: eval_error.h
===================================================================
--- eval_error.h	(リビジョン 12561)
+++ eval_error.h	(作業コピー)
@@ -155,6 +155,7 @@
 	long i;
 	long len = RARRAY_LEN(errat);
 	VALUE *ptr = RARRAY_PTR(errat);
+        int truncate = eclass == rb_eSysStackError;
 	
 #define TRACE_MAX (TRACE_HEAD+TRACE_TAIL+5)
 #define TRACE_HEAD 8
@@ -164,7 +165,7 @@
 	    if (TYPE(ptr[i]) == T_STRING) {
 		warn_printf("\tfrom %s\n", RSTRING_PTR(ptr[i]));
 	    }
-	    if (i == TRACE_HEAD && len > TRACE_MAX) {
+	    if (truncate && i == TRACE_HEAD && len > TRACE_MAX) {
 		warn_printf("\t ... %ld levels...\n",
 			    len - TRACE_HEAD - TRACE_TAIL);
 		i = len - TRACE_TAIL;
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread

Prev Next