Istnieje kilka sposobów na zmiażdżenie tego błędu.
Jedno to bardzo uciążliwe, ale będzie Ci numer wiersza wyjątku jest kod, który wygląda następująco:
foo();
console.log("Line 1");
bar();
console.log("Line 2");
baz();
console.log("Line 3");
i tak dalej, a jeśli się to w konsoli:
Line 1
Line 2
Uncaught exception: undefined
następnie wiesz, że baz() spowodował błąd. Innym sposobem jest użycie debuggera, tak:
debugger;
foo();
bar();
baz();
i można go używać debuggera Firefoksa iść na każdej linii i zobaczyć, który zgłasza błąd na konsoli.
Jeśli masz dużo kodu, można spróbować sztuczki dziel i zwyciężaj, tak:
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");
Następnie, jeśli konsola wygląda następująco:
Block one
Uncaught exception: undefined
Następnie problem jest w bloku 2. Następnie, można to zrobić:
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");
A jeśli widzisz:
Line 1
Uncaught exception: undefined
Wtedy wiesz, że var barArr = barStr.split("");
to twój problem. Od tego czasu, może chcesz się zalogować wartości zmiennych, takich jak to:
console.log(barStr);
var barArr = barStr.split("");
A jeśli to zobaczyć w konsoli:
undefined
Uncaught exception: undefined
Wtedy wiesz, że bar()
wraca undefined
(zamiast łańcucha), który nie ma metody split
. Następnie spojrzysz na kod paska, aby określić, czy, powiedzmy, zapomniałeś parametru? Mabey bar
wygląda następująco:
function bar(value){
return strings[value];
}
i strings
jest obiektem coś w nim. Dlatego strings[undefined]
zwróci undefined
, który nie ma metody split
. Bug zmiażdżył!
użyć innej przeglądarki - Chrome czasami pomóc debugowania problemów że Firefox (lub Firebug) nie złapie. – user2182349
@ user2182349 Ten problem nie pojawia się w ogóle w przeglądarce Chrome. Naprawdę nie jest to ważne, jestem ciekawy, czy istnieje jakikolwiek sposób na interakcję z takim problemem lub dlaczego Firefox to robi. – MattTreichelYeah
po otwarciu Debuggera na karcie debugera, po kliknięciu narzędzia po prawej stronie. istnieje opcja o nazwie, wstrzymaj na wyjątku, a także chcesz odznaczyć ignorowanie złapanych wyjątków, a następnie załaduj ponownie stronę – tik27