如何在Firefox中调试“未捕获的异常:未定义(未知)”

时间:2017-01-06 04:49:20

标签: javascript debugging firefox exception uncaught-exception

我在控制台中出现了这一行,仅在Firefox中,来自我正在开发的JavaScript应用程序:

Console log of Exception

它似乎相对无害,但我很好奇是否有任何方法可以推断它的起源,因为它必须来自某个地方,即使它声称“未知”。将整个脚本包装在try / catch块中并切换Firefox的“Pause on Exception”设置不会执行任何操作,这似乎意味着它是一个特殊的例外?我有一些想法我的代码的哪些部分可能导致它使用Working Draft API,但我更感兴趣的是它为什么报告这种方式以及我可以做些什么。 Firefox不提供更多细节吗?

3 个答案:

答案 0 :(得分:5)

有几种方法可以尝试压制这个错误。

有一件事非常繁琐,但会让你得到异常的行号是看起来像的代码:

foo();
console.log("Line 1");
bar();
console.log("Line 2");
baz();
console.log("Line 3");

依此类推,如果你在控制台中得到这个:

Line 1
Line 2
Uncaught exception: undefined

然后你知道baz()导致错误。另一种方法是使用调试器,如下所示:

debugger;
foo();
bar();
baz();

你可以使用firefox的调试器遍历每一行,看看哪一行将错误抛给控制台。

如果你有很多代码,你可以尝试分而治之的技巧,如下:

var fooStr = foo();
var fooArr = fooStr.split("");
fooArr = fooArr.reverse();
foo(fooArr.join(""));
console.log("Block one");

var barStr = bar();
var barArr = barStr.split("");
barArr = barArr.reverse();
bar(barArr.join(""));
console.log("Block two");

var bazStr = baz();
var bazArr = bazStr.split("");
bazArr = bazArr.reverse();
baz(bazArr.join(""));
console.log("Block three");

然后,如果控制台看起来像这样:

Block one
Uncaught exception: undefined

然后问题出现在第2块。然后,你可以这样做:

var barStr = bar();
console.log("Line 1");
var barArr = barStr.split("");
console.log("Line 2");
barArr = barArr.reverse();
console.log("Line 3");
bar(barArr.join(""));
console.log("Line 4");
console.log("Block two");
console.log("Line 5");

如果你看到:

Line 1
Uncaught exception: undefined

然后你知道var barArr = barStr.split("");是你的问题。从那时起,您可能希望记录变量值,如下所示:

console.log(barStr);
var barArr = barStr.split("");

如果你在控制台中看到这个:

undefined
Uncaught exception: undefined

然后您知道bar()正在返回undefined(而不是字符串),它没有split方法。然后你看看吧的代码来判断你是否忘了参数? Mabey bar看起来像这样:

function bar(value){
    return strings[value];
}

strings是一个包含其中某些内容的对象。因此,strings[undefined]将返回undefined,其中没有split方法。虫子被压扁了!

答案 1 :(得分:3)

我找到了一个简单的例子来重现你看到的错误。

<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <script>
        throw undefined
    </script>
</head>

<body>
</body>

</html>

firefox控制台显示:

uncaught exception: undefined  (unknown)

这正是你得到的。这使我相信错误发生在嵌入在html中的脚本中。

知道您可能希望将所有此类脚本移动到自己的文件中,以便您可以正常调试代码。

<强>更新

无意中我发现了另一种可以获得此类错误的方法。它以eval

的形式出现

<强>的index.html

<!doctype html>
<html>
<head>
  <script src="script.js"></script>
</head>
<body></body>
</html>

<强>的script.js

eval('throw undefined');

答案 2 :(得分:1)

您可以转到about:config并创建一个布尔首选项dom.report_all_js_exceptions。
这将强制在错误控制台中显示更多异常。

https://developer.mozilla.org/en-US/docs/Archive/Mozilla/Exception_logging_in_JavaScript