From: "NAKAMURA, Hiroshi" Date: 2003-02-25T23:22:20+09:00 Subject: [ruby-dev:19662] Re: Debugger Not Working なひです。 > From: "Yukihiro Matsumoto" > Sent: Tuesday, February 25, 2003 4:35 AM > 主になひさん宛です。 > > [ruby-talk:65644]のDebugger Not Workingの件ですが、debug.rb > の302行めが > > file = File.basename($1) if $1 > > になっているため、$1が指定されなかった場合basenameが行われず > ファイル名がマッチしないのでブレークポイントが検出できないと > いう問題が起きているようです。1.6ではここが > > file = File.basename($1 || file) > > となっているのですが、これを変更した理由ってのを覚えています > か? cvs annotateによると > > 1.31 (nahi 29-Mar-02): file = File.basename($1) if $1 > > で去年の3月29日に変更したことになってます。 1.7の修正が http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/lib/debug.rb.diff?r1=1.29&r2=1.30&f=h と http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/lib/debug.rb.diff?r1=1.30&r2=1.31&f=h の2度に分けてで、1.6の修正が http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/lib/debug.rb.diff?r1=1.20.2.5&r2=1.20.2.6&f=h なんですが、これを見ると単に1.6で気づいて直したものを、 1.7に反映し損ねているようです。すいません。 先ほど修正し、テストも通ったのでcommitしました。 ちなみにテストは [ruby-dev:16988] のやつです。 いつかどこかに入れたいなー。 ruby-talkのほうは明日にでも返事します。 / / / 下手すると誰も興味のない話題。 ちなみに手元のほうはやはり直っていました。こんな感じ。 when /^\s*b(?:reak)?\s+(?:(.+):)?(.+)$/ pos = $2 bp_file = File.basename($1 || file) bp = if pos =~ /^\d+$/ LineBreakPoint.new(bp_file, pos.to_i) else MethodBreakPoint.new(bp_file, pos.intern.id2name) end break_points.push(bp) stdout.printf "Set breakpoint %s\n", bp.dump fileへの再代入でなく、bp_fileへの代入としているのは、 フレームの移動によりファイルをまたいで連続してファイル省略で breakを打ったときに、fileが書き換えられて不思議な挙動に なるのを避けるためです(fileはコマンド抜けるまで有効)。 やはり早めに追いつかせないとまずいかも。