Pending MethodBreakpoint
まだ誰も着手していません。
評価
調査の方向性
Reproduce the b o.s and b not_lvar.foo examples in target.rb using exe/rdbg, then read the breakpoint handling behind the break command. Done means the behavior clearly distinguishes current-context expressions from singleton-method expressions and defines when an invalid expression may remain pending.
索引モデルが issue の本文から書いたものです。
説明
When we set a method breakpoint with break C.foo and If the C or C.foo is not defined, it will be a pending breakpoint and when C.foo is activated, it will be activated.
We can set breakpoint with any expression like:
[1, 7] in target.rb
1|
2| def (o = '').s
3| :s
4| end
5|
=> 6| p o.s
7| __END__
=>#0 <main> at target.rb:6
(rdbg:commands) b o.s
#0 BP - Method o.s at target.rb:2
(rdbg) c
[1, 7] in target.rb
1|
2| def (o = '').s
=> 3| :s
4| end
5|
6| p o.s
7| __END__
=>#0 .s at target.rb:3
#1 <main> at target.rb:6
Stop by #0 BP - Method o.s at target.rb:2
In this case, user can set a breakpoint with current context (lvar o).
The problem is, if we write an expression which does not valid, the breakpoint will be registered as a pending breakpoint.
(rdbg) b not_lvar.foo
undefined local variable or method `not_lvar' for "":String
#1 BP - Method (pending) not_lvar.foo
Maybe it will not be activated in future.
This is useful for singleton method:
[master]$ exe/rdbg target.rb -e 'b C.foo'
DEBUGGER: Session start (pid: 19219)
[1, 7] in target.rb
1|
=> 2| class C
3| def self.foo
4| end
5| end
6|
7| __END__
=>#0 <main> at target.rb:2
(rdbg:commands) b C.foo
uninitialized constant C
#0 BP - Method (pending) C.foo
(rdbg) c
DEBUGGER: BP - Method C.foo at target.rb:3 is activated.
At first, C is not defined so it will be a pending breakpoint. After that C.foo is defined and the breakpoint will be activated.
b expr.method has two usecases:
- (1) want to set breakpoint to the current context
- (2) want to set singleton class
For (1), it should not make a pending breakpoint.
For (2),, it should.
We can not recognize the purpose for (1) and (2) now.
Ideas:
- If the expression is like
Constant, allow to make pending.- It saves (2).
- Not complete for (1)
- Add option to recognize 1 and 2.
break --allow-pending C.foofor (2).- Too long...
- 主要言語
- Ruby
- スター
- 1.3k
- フォーク
- 146
- PR マージ指標
- 30日以内にマージされた PR はありません
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
ruby/debug のほかの issue
-
難易度 3/5 1〜2日 初心者へのやさしさ 68/100
-
Support exceptionOptions in setExceptionBreakpoints to catch arbitrary exception classes via DAP オープン
難易度 4/5 3〜5日 初心者へのやさしさ 55/100
-
難易度 3/5 1〜2日 初心者へのやさしさ 45/100
-
難易度 4/5 3〜5日 初心者へのやさしさ 52/100
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
似ている issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 90/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
-
バグ
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
voxpupuli/puppet-epel#186 · コメント 1 件 ·
-
external_created_at is no longer used for the message timestamp since the new message UI (v4.4.0) オープンBug Frontend
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100