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

dev*_*xer 5 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.');
    }
};
Run Code Online (Sandbox Code Playgroud)

以下是调试此函数的调用时发生的情况:

1.从第32行开始.

如果条件

2.继续前进到第33行.

if块的第一行

3.再次步入,进入第34行.

if块的第二行

再来一次,前进到36号线???

else块的第一行

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

一些重要的事实:

  1. 这里没有遗漏的步骤.
  2. 这真的发生了.
  3. 我只是sendMessage从一个地方打电话,我正在记录这个电话.sendMessage日志中没有未计入的调用,因此我不认为异步是一种解释.
  4. 我也尝试使用Firebug调试器做同样的事情,同样疯狂的事情发生了.

编辑/后随

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

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

编辑2

这是sendMessage函数的间距和CRLF :

在此输入图像描述

Seb*_*ner 3

这是因为调试器在返回到调用堆栈帧之前会单步执行到最后一个可执行行。在你的例子中,这是包含该alert()函数的第 36 行。如果调试器跳到函数的右花括号,即第 38 行,就会更清楚。

已经有一份报告改变了这种行为:

https://bugzil.la/1013219