2010-05-17 13 views
10

Projekt Ich arbeite an verwendet jQuery.Komplexes JavaScript. Was hat mich angerufen?

Ich habe eine Reihe von Ajax-Aufrufe gemacht, die andere HTML-Fragmente laden(), die wiederum andere Fragmente laden(). Das Ganze ist verwirrend. Ich habe den Code nicht geschrieben.

Gibt es ein Tool, mit dem ich den Callstack laufen kann, damit ich herausfinden kann, was eine Methode aufruft? irgendwelche Browser-Tools, die mir helfen würden, dies herauszufinden?

Auflösung:
Am Ende dieser verursacht wurde, weil ein < script src = "..." wurde in dem serverseitigen Code injiziert. Ihre Vorschläge haben mir sehr geholfen - es war eine Kombination aus diesen und die vorübergehende Einstellung von Ajax auf Synchronisierung statt Async hat mir geholfen, das Problem aufzuspüren.

$.ajaxSetup({ 
    async: false 
}); 
+0

Javascript ist so viel Spaß beim Debuggen, nicht wahr? Ich kenne keine Tools, mit denen Sie den Stack überwachen können, und fügen Sie Breakpoints hinzu, um Dinge zu überprüfen. Der beste Debugger, den ich für JS benutzt habe, ist Firebug: https://addons.mozilla.org/en-US/firefox/addon/1843/ – Jay

+0

@Jay, ich benutze VS2008 und setze JS Code Breakpoints die ganze Zeit. –

+1

Beachten Sie, dass Ajax-Methoden aufgrund ihrer asynchronen Natur schwer zu debuggen sind - die zurückkehrenden Aufrufe befinden sich nicht auf demselben Stapel wie die aufrufenden Aufrufe. –

Antwort

8

Firebug ist dazu in der Lage.

Wenn der Debugger angehalten wird, zeigt Firebug den Aufruf-Stack an, bei dem es sich um die verschachtelten Funktionsaufrufe handelt, die derzeit ausgeführt werden und auf die Rückgabe warten.

Der Aufrufstapel wird als kompakter Streifen von Schaltflächen in der Symbolleiste dargestellt, jeder mit dem Namen einer Funktion auf dem Stapel. Sie können auf eine beliebige Schaltfläche klicken, um zu der Zeile zu springen, in der die Funktion angehalten wurde, und sich die lokalen Variablen in dieser Funktion ansehen.

+2

Sie können auch "console.trace()" von der Konsole aus verwenden, um den detaillierten Aufruf-Stack anzuzeigen, sobald der Debugger angehalten wurde. – Rajat

+0

Wie pausiere ich im genau richtigen Moment? Gibt es eine console.pause? – BuddyJoe

+0

oder sollte ich nur einen Alarm in die betreffende Funktion werfen? – BuddyJoe

1

+1 für Brandstifter. Sie können den Debugger anhalten, um den Aufrufstack zu pausieren

1

Sie könnten auch versuchen, Opera Dragonfly (verfügbar in jedem neueren Opera Build). Ich finde es weniger raffiniert als Firebug, aber einige Fehler sind viel expliziter darunter.