2009-03-01 7 views
0
function testFun() { 
    onerror = function() { log("caught the error"); return true; }; 
    setTimeout(function() { throw "bad bad bad"; }, 300); 
}; 

Dies ist Beispiel, Code, aber es zeigt ein Problem. Wenn ich dies in FF oder IE7 ausführe, druckt es die sinnvolle "gefangen den Fehler" Nachricht (eine sinnvolle "Log" -Funktion vorausgesetzt).onerror Handhabung mit VS2008

Wenn ich jedoch den Code in VS2008 debuggen, stoppt der Debugger auf dem Wurf mit der Nachricht: 'Microsoft JScript-Laufzeitfehler: Ausnahme ausgelöst und nicht gefangen'. Wenn ich 'fortfahren' oder 'ignorieren' sage, wird die Protokollnachricht nicht erzeugt.

Dies ist ein Problem, da der echte Code, mit dem ich arbeite, viel größer ist als dieser, und ich möchte gelegentlich, Sie wissen, Debug-Zeug. Also zwei Fragen:

  1. Irgendwelche wissen, warum und kann ich dieses Verhalten mit einigen Flag ändern, über die ich nicht weiß?
  2. Mache ich, was ich denke, in diesem Code (Einstellung der globalen 'onerror' Handler)? Wenn nicht, was ist das geeignete Muster, um diese Art von Fehlern zu erfassen?

Hinweis: Es gibt keinen Unterschied zu diesem Problem, wenn ich window.onerror stattdessen verwende.

Antwort

2

Nach this definiert eine globale onerror Funktion funktioniert nicht in IE. Sie haben wahrscheinlich über IE6 oder früher gesprochen, vielleicht haben MS es für IE7 behoben - aber ich würde nicht erwarten, dass dies automatisch zum VS-Debugger durchläuft.

Versuchen Sie auf jeden Fall, window.onerror = function statt nur onerror zu verwenden.

Wenn das nicht funktioniert, müssen Sie einen try/catch Block innerhalb Ihrer Timer-Funktion verwenden, denke ich.

PS: Hol dir Firefox und benutze Firebug. der Debugger (und alles andere) ist viel besser und netter zu verwenden als die VS-Debugging