javascript - 如何在 Firefox 中调试 "uncaught exception: undefined (unknown)"

标签 javascript debugging firefox exception uncaught-exception

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

Console log of Exception

它似乎相对无害,但我很好奇是否有任何方法可以推断出它的来源,因为它必须来自某个地方,即使它声称“未知”。将整个脚本包装在 try/catch block 中并切换 Firefox 的“异常时暂停”设置不会执行任何操作,这似乎暗示它是一个特殊的异常?我有一些想法哪些我的代码可能导致它使用工作草案 API,但我更感兴趣的是为什么它以这种方式报告以及我可以做些什么。 Firefox 不提供更多细节吗?

最佳答案

有几种方法可以尝试消除此错误。

有一件事非常乏味但会让你得到异常的行号是这样的代码:

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 block 。那么,你可以这样做:

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 方法。然后你看bar的代码判断是不是,说你忘记了一个参数? Mabey bar 看起来像这样:

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

strings 是一个包含某些东西的对象。因此,strings[undefined] 将返回 undefined,它没有 split 方法。错误被压扁了!

关于javascript - 如何在 Firefox 中调试 "uncaught exception: undefined (unknown)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41499109/

相关文章:

javascript - jQuery:隐藏包含 ul + print 的子 td 的 tr?

javascript - FreeCodeCamp 的“奇数斐波那契数之和”任务是否有递归版本?

embedded - 如何使用 'target remote' 在 gdb 中重新运行该程序?

objective-c - 如何向 objc_exception_throw 添加断点?

firefox - 关闭 “unreachable code after return statement” 警告

javascript - Backbone 项目适用于除 Firefox 之外的所有浏览器

javascript - 无法从 User.js 中找到方法

c++ - 如何与调试器交谈,或更改异常消息?

macos - 深色背景上的浅色文本在 Firefox for Mac 上过于粗体

javascript - 如何使用 casperJS 等待 socket.io 连接返回数据?