Pending MethodBreakpoint
還沒有人認領這個 Issue。
評估
研究方向
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 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 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
-
難度 2/5 1-3 小時 新手友好度 65/100
-
難度 2/5 1-3 小時 新手友好度 75/100
-
難度 2/5 1-3 小時 新手友好度 70/100
googleapis/google-api-ruby-client#28001 · 5 個 reaction ·
-
難度 2/5 1-3 小時 新手友好度 75/100
-
難度 2/5 1-3 小時 新手友好度 70/100