ほとんどの場合、答えは例外を破ることですが、前の答えで示したように、ここではそうではないようです。
この問題は、スタックトレースの生成が失敗する原因となるコードが原因である可能性があります。V8の関連コードの一部を次に示します。
function FormatStackTrace(error, frames) {
var lines = [];
try {
lines.push(error.toString());
} catch (e) {
try {
lines.push("<error: " + e + ">");
} catch (ee) {
lines.push("<error>");
}
}
for (var i = 0; i < frames.length; i++) {
var frame = frames[i];
var line;
try {
line = frame.toString();
} catch (e) {
try {
line = "<error: " + e + ">";
} catch (ee) {
// Any code that reaches this point is seriously nasty!
line = "<error>";
}
}
lines.push(" at " + line);
}
return lines.join("\n");
}
ご覧のとおり<error>
、キャッチされなかった例外またはスタックフレームの文字列表現を取得できなかった場合は取得し、その文字列表現を取得しようとすると失敗します。たとえば、次のコードを実行すると、次のようになります。
function NastyException() {}
NastyException.prototype.toString = function() { throw this; };
throw new NastyException();
次に、この役に立たないエラーが発生します。
Uncaught #<error>
確かに、それはあなたが受け取っていたエラーではありませんが、それほど遠くはありません。