无法在 ocamldebug 中设置断点:“在那里找不到任何事件。”

Posted

技术标签:

【中文标题】无法在 ocamldebug 中设置断点:“在那里找不到任何事件。”【英文标题】:Cannot set breakpoint in ocamldebug: "Can't find any event there." 【发布时间】:2015-08-04 15:43:51 【问题描述】:

我正在使用 ocamldebug(使用 OCaml 4.02.1),并且试图在特定模块内的某处设置断点,但我得到的只是一条有用的错误消息:Can't find any event there.

作为一个例子,下面是我想设置断点的函数1的摘录,如 ocamldebug 所列:

(ocd) list Value.Eval_slevel 79 83
79
80    let slevel stmt = match slevel with
81      | Per_stmt_slevel.Global i -> i
82      | Per_stmt_slevel.PerStmt f -> f stmt
83

我尝试了break 命令的几种变体,但每次都得到相同的结果:

(ocd) break @ Value.Eval_slevel 80       // module + line number
Can't find any event there.
(ocd) break @ Value.Eval_slevel 80 21    // module + line + column
Can't find any event there.
(ocd) break @ Value.Eval_slevel # 3335   // module + character number
Can't find any event there.

我还尝试了附近的源代码行(以检查可能的行不匹配),我还尝试使用模块同义词(例如Eval_sleveleval_slevel),但无济于事。

请注意,如果我手动单步执行程序直到它到达此函数,则表明第 80 行确实有一个事件:

Time: 17447400 - pc: 3865360 - module Value.Eval_slevel
80    let slevel stmt = <|b|>match slevel with

而且,在这种情况下,我可以手动设置本地断点:

(ocd) break
Breakpoint 1 at 3865360: file src/value/eval_slevel.ml, line 80,
  characters 22-119

但显然我们的想法是无需手动找到它就可以做到。

如果我尝试使用函数名设置断点,ocamldebug 看不到它。即使在该事件之后运行程序之后,ocamldebug 似乎也看不到标识符:

(ocd) break Value.Eval_slevel.slevel
Unbound identifier Value.Eval_slevel.slevel

这就是我无法设置断点的原因吗?如果是这样,是否有解决方法?否则,还有其他方法可以设置这些断点吗?

备注

以下是我尝试做的其他一些事情,以及一些观察结果:

在类似的文件和函数上设置断点:我也获得了Can't find any event there.,但在某些文件中它确实有效。 错误不是由于模块名称不正确,否则 ocamldebug 会以 No source file for &lt;module&gt; 响应。 错误不是由于不存在的行号,否则会显示Position out of range. 该错误不是模块初始化问题,因为这种情况下的消息是:The module path &lt;module&gt; is not yet initialized. Please run program forward until its initialization code is executed.

1 这个例子来自 Frama-C,它是可重现的,以防有人感兴趣。但是,我无法在该代码库之外生成一个最小示例。

【问题讨论】:

【参考方案1】:

您是否有机会通过 dynlink 加载 Value 模块?我知道this issue 已经开放了一段时间,肯定会适用于 OCAML 4.02.1。如果是这种情况,您必须禁用 dynlink 并静态链接才能让 ocamldebug 使用该模块。

【讨论】:

好点,但它更像是一个阐述而不是一个答案。 cmets 部分可能更合适。

以上是关于无法在 ocamldebug 中设置断点:“在那里找不到任何事件。”的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Chrome DevTools 中设置所需的断点?

无法使用 intellij 13.1.2 在 grails 2.3.8 中设置断点

无法在 VS Code 中设置断点调试节点 Typescript

PHPstorm - 无法在blade.php 文件中设置断点

在T4模板中设置断点

无法在 Firefox Developer Edition (FDE) 的调试器窗格中设置断点