2010-03-18 3 views
7

Ich habe eine Seite, die eine byzantinische Menge an JavaScript-Code ausgeführt hat. Nur in Internet Explorer und nur in Version 8 erhalte ich eine Langscript-Warnung, die ich zuverlässig reproduzieren kann. Ich vermute, dass Event-Handler sich in einer Endlosschleife auslösen.Kann ich den Internet Explorer-Debugger dazu bringen, in lang laufenden JavaScript-Code einzubrechen?

Die Entwicklerwerkzeuge hinken schrecklich unter dem Gewicht des laufenden Skripts, aber ich bin anscheinend in der Lage, das Protokoll zu erhalten, um mir zu sagen, welche Zeile Skript ausgeführt wurde, als ich abbrach, aber es ist unvermeidlich tiefe Rohrleitungen der ExtJS Code, den wir verwenden, und ich kann nicht sagen, wo es in meinem Stapel von Code ist.

Eine Möglichkeit, den Call-Stack zu sehen, würde funktionieren, aber am liebsten würde ich gerne in den Debugger einsteigen, wenn ich die lange Skript-Warnung bekomme, damit ich einfach durch den Stack gehen kann.

Es gibt eine ähnliche Frage geschrieben, aber die Antworten waren für ein nicht-das-richtige-Werkzeug, oder die nicht sehr hilfreiche Rat, um die Hälfte meines Codes zu einer Zeit auf einer binären Jagd für die Endlosschleife zu beseitigen. Wenn mein Code einfach genug wäre, um das zu tun, hätte er wahrscheinlich nicht die Endlosschleife bekommen. Wenn ich das Problem in Firebug reproduzieren könnte, wäre ich wahrscheinlich auch viel glücklicher.

Antwort

0

Ich bin schon einmal dazu gekommen und hatte ein bisschen Glück beim Aktivieren der Entwicklerwerkzeuge zusammen mit Visual Studio. Wenn ein Fehler auftritt, wird das Laden der Seite angehalten und ich kann dann Visual Studio laden, um die bestimmte Zeile zu sehen, die den Fehler verursacht.

Diese Seite hat einige Informationen zur Verwendung von Visual Studio zusammen mit dem Internet   Explorer Debugger: Using Visual Studio to Debug JavaScript in IE

3

Hier ist, was ich tun würde:

  1. Zum http://www.microsoft.com/whdc/devtools/debugging/default.mspx und die Debugging Tools installieren für Windows. Sie möchten WinDBG ausführen, wenn dies installiert ist.

  2. Befolgen Sie die Schritte unter http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx#a, um die Verbindung zum Symbolserver einzurichten und die Symbole automatisch auf Ihr lokales Laufwerk herunterzuladen (c: \ websymbols - oder was auch immer).

  3. Führen Sie IEXPLORE.EXE unter WinDBG. Die Hilfedatei sollte Ihnen bei Bedarf dabei helfen. Sie benötigen ein paar Befehle, sobald Internet Explorer ausgeführt wird und so weiter. Erstens, gehen Sie voran und lassen Sie dieses große Skript laufen.

  4. Break in den Debugger (CTRL-SCROLLLOCK zu brechen).
    a. Führen Sie eine LN Liste aus, um die DLL-Dateien, die geladen werden, zu erhalten. Hoffentlich haben Sie JSCRIPT.DLL im Speicher geladen.
    b. Geben Sie .reload /f ein, um das erneute Laden aller Symbole zu erzwingen. Dies wird eine Weile dauern. Jetzt, nachdem dies geschehen ist, geben Sie LN erneut ein und Sie sollten sehen, dass die richtige JSCRIPT.PDB auf Ihr System in dem zuvor eingerichteten Symbolverzeichnis heruntergeladen wurde.

  5. Je nachdem, was Sie tun möchten, müssen Sie möglicherweise den Debugger neu starten, aber Sie können dies tun: Nach der ersten Pause bei WINDG Laden, können Sie "sxe ld jscript.dll" eingeben und es wird wann brechen jscript.dll lädt.

  6. Dies ist der schwierige Teil, denn wenn diese Lasten, die Sie nicht den Code für jscript.dll haben, aber Sie haben die richtigen Symbole (wenn sie nicht geladen sind, dann erneut laden sie mit .reload /f). Sie können die verfügbaren Funktionen anzeigen, indem Sie "x! Jscript" eingeben und eine vollständige Liste aller Funktionen und Variablen erhalten.

  7. Wählen Sie einen aus, legen Sie einen Haltepunkt fest, und dann sollten Sie in der Lage sein zu verfolgen, was mit Ihrem Skript passiert.

  8. Wenn nichts anderes erreicht wird, können Sie mit der .reload /f process die entsprechenden jscript.pdb Dateien auf Ihrem System laden. Es ist möglich, dass Sie diese in Verbindung mit Visual Studio verwenden können, um zusätzliches Debugging auf diese Weise durchzuführen, aber ich bin mir nicht sicher, wie gut das funktionieren wird.

Verwandte Themen