From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1998-04-15T19:59:01+09:00 Subject: [ruby-dev:2354] Re: exceptions (Re: Re: [Req] stack level too deep (fatal)) けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :2351 ] the message: "[ruby-dev:2351] exceptions (Re: Re: [Req] stack level too deep (fatal)) ", on Apr/15 17:57(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです > >|逆に経験的なものになるんですが, 明らかにデバッグの妨げになるのは外に出 >|せばいいかな... > >| ProgramError >| SyntaxError 構文エラー >| LocalJumpError catch/throwのエラー >| ArgumentError 引数間違い >| NameError 未定義のローカル変数 > ># LocalJumpErrorはbreak/next/redo/rety/returnのエラーです. > >|でも, 4つのエラーは勝手に例外が捕捉されてエラーの原因が分からなくなっ >|たことがあるのばかりです. >なるほど.これらのうちLocalJumpErrorとSyntaxErrorは問題ない >と思いますが,ArgumentError, NameErrorはどうなのかなあ.これ >らを含めてTypeErrorを含めないのは片手落ちのような気もします. > >が,TypeErrorも含めて良いのかというと,うーん. そうですねえ... きりがないですね... 問題はそこではないかも知れないです ね. あそうそう. 私は, 今は基本的にはrescueは例外を指定しています. rescueで 例外を指定しないのは, とりあえず全部の例外を捕捉したい時なんですね. で, その時は結構デバッグが大変なんですよねえ... そこで思ったのが, -w の時は, 例外が発生したらとりあえず例外の発生した 場所と例外の種類を出力すると良いんじゃないかしら? それか, pと同じようなデバッグ用のメソッド(where or bt)を用意してもらえ ば良いかも. いまでも, 出力できますが, print $!, "\n" print $@.join("\n"), "\n" って一々書かないといけないしこれだと全部出ちゃうし... というわけで, 以 下のようなメソッドを用意してもらえると嬉しいかも. def bt(n = nil) if n == 0 print $!, "\n" print $@.join("\n"), "\n" else print $!, "\n" print $@[0..n-1].join("\n"), "\n" else デフォルトのバックトレース表示 end end そしたら begin ... rescue bt(1) if $DEBUG ... end って書けばいいだけになりますし. おまけ. 一応再分類しましたので: GlobalExit SystemExit Interrupt Exception ProgramError SyntaxError LocalJumpError SystemStackError ParameterError ArgumentError NameError TypeError LoadError RegxpError IndexError ZeroDivisionError NotImpError SecurityError SystemCallError ... IOError EOFError ThreadError SocketError RuntimeError __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---