Firefox调试器从if块直接跳转到else块

时间:2014-10-17 06:36:51

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

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

这是有问题的功能:

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行开始。

if condition

2。 Step In,进入第33行。

first line of if block

3。再次进入第34行。

second line of if block

4。再一次进入第36行???

first line of else block

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

一些重要的事实:

  1. 这里没有遗漏的步骤。
  2. 这真的发生了。
  3. 我只是从一个地方拨打sendMessage,并且我会在发出呼叫时记录。日志中没有sendMessage次调用的不明,所以我不相信异步是一种解释。
  4. 我也尝试过与Firebug调试器相同的事情,并发生同样的疯狂事情。
  5. 编辑/后随

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

    另外,我应该提到,即使直接进入该代码,也不会出现任何警报。

    编辑2

    以下是sendMessage函数的间距和CRLF:

    enter image description here

2 个答案:

答案 0 :(得分:3)

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

已有报告更改此行为:

https://bugzil.la/1013219

答案 1 :(得分:1)

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