【问题标题】:Firefox debugger jumps from an if-block directly to an else-blockFirefox 调试器从 if 块直接跳转到 else 块
【发布时间】:2014-10-17 06:36:50
【问题描述】:

我想知道下面显示的顺序是如何发生的。

这里是有问题的函数:

WebSocketConnector.prototype.sendMessage = function(message) {
    if (socket !== null) {
        socket.send(message);
        console.log('Sent: ' + message);
    } else {
        alert('Failed to send message. WebSocket connection not established.');
    }
};

当我调试对该函数的调用时会发生以下情况:

1。从第 32 行开始。

2。 Step In,前进到第 33 行。

3。再次 Step In,前进到第 34 行。

4。再进一次,前进到第 36 行???

--> 怎么可能直接控制从if块的最后一行到else块的第一行?

一些重要的事实:

  1. 这里没有遗漏的步骤。
  2. 这真的发生了。
  3. 我只从一个地方打电话给sendMessage,当那个电话发生时我正在记录。日志中没有未说明的sendMessage 调用,所以我不认为异步是一种解释。
  4. 我也用 Firebug 调试器尝试了同样的事情,同样疯狂的事情发生了。

编辑/跟进

如果我在 else 块的第一行添加一个 console.log 语句(将警报下推到第 37 行),控件将从第 34 行直接转到第 37 行(跳过 console.log 语句)。

另外,我应该提到的是,实际上从未出现任何警报,即使直接进入该代码也是如此。

编辑 2

这是sendMessage函数的间距和CRLF:

【问题讨论】:

  • 您的代码在您的问题、IDE 和 firefox 调试器中的格式是否与换行符完全相同?也许这是一个错误,与代码在调试器中显示的方式与在 VM 中加载的方式不同,并且行号不对应......
  • @reverse_engineer,谢谢,但情况似乎并非如此。我确保代码已格式化并重新测试,但调试器仍然做同样的事情。我还检查了 MS Word 中的文本以查看空格和换行符 (CRLF),但它们似乎都是正确的(请参阅我的问题中的编辑 2)。
  • 我刚刚看到几乎完全相同的东西,当该行导致异常时。在例外情况下,它似乎显示得好像它要去别的地方。很奇怪。

标签: javascript firefox firebug javascript-debugger firefox-developer-tools


【解决方案1】:

这是因为调试器在返回调用堆栈帧之前会跳到最后一个可执行行。在您的情况下,这是包含 alert() 函数的第 36 行。如果调试器跳转到函数的右花括号,即第 38 行,会更清楚。

已经有报告可以改变这种行为:

https://bugzil.la/1013219

【讨论】:

  • 就是这样。谢谢!
【解决方案2】:

不幸的是,Firefox 中的调试器存在一些非常奇怪的行为。如果您描述的内容可能与this bug 有关,我不会感到惊讶。 “step”功能有时无法达到您的预期,或者 Chromium 浏览器的功能。

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多