web-dev-qa-db-ja.com

Firefoxで「キャッチされない例外:未定義(不明)」をデバッグする方法

私が開発しているJavaScriptアプリケーションから、Firefoxでのみこの行がコンソールに表示されます。

Console log of Exception

比較的害はないように見えますが、「不明」と言っていても、どこから来たのかを判断する方法があるかどうか知りたいです。スクリプト全体をtry/catchブロックでラップし、Firefoxの[例外で一時停止]設定を切り替えると、何も実行されません。これは、特別な例外であることを示しているようです。いくつかのアイデアwhatがあり、コードの一部がワーキングドラフトAPIを使用している原因になっている可能性がありますが、この方法でレポートする理由に興味がありますそれについて私が何ができるか。 Firefoxはこれ以上の詳細を提供しませんか?

15
MattTreichel

このバグをつぶそうとするいくつかの方法があります。

非常に退屈ですが、例外の行番号を取得する1つのことは、次のようなコードです。

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

など、コンソールでこれを取得した場合:

_Line 1
Line 2
Uncaught exception: undefined
_

次に、baz()がエラーの原因であることがわかります。もう1つの方法は、次のようにデバッガを使用することです。

_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を返します。バグがつぶれた!

4
programmer5000

表示されるエラーを再現する簡単な例を見つけました。

<!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');
3
Niebieski

About:configに移動して、ブール設定dom.report_all_js_exceptionsを作成できます。
これにより、エラーコンソールに表示される例外がさらに多くなります。

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

1
Trung Duong