Pending MethodBreakpoint

未关闭
#177 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
25/100
Issue 类型
功能
描述清晰度
需要澄清
活跃度
停滞
技术栈
ruby
领域
devtools

调研方向

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.foo for (2).
    • Too long...
主要语言
Ruby
星标
1.3k
派生
146
PR 合并指标
30 天内没有已合并 PR

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

ruby/debug 的其他 Issue

查看 ruby/debug 的全部 Issue

相似的 Issue

更多 Ruby Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。