2010-05-17 4 views
10

Le projet sur lequel je travaille utilise jQuery.Complexe JavaScript. Qu'est-ce qui m'a appelé?

J'ai fait une série d'appels Ajax qui chargent() d'autres fragments HTML qui à leur tour chargent() d'autres fragments. Le tout est confus. Je n'ai pas écrit le code.

Y a-t-il un outil qui me permettra de marcher sur les callstacks pour que je puisse comprendre ce qui appelle une méthode? des outils de navigation qui pourraient m'aider à comprendre cela?

Résolution:
En fin de compte cela a été causé parce que un script < src = « ... » a été injecté dans le code côté serveur. Vos suggestions ont vraiment aidé - c'était une combinaison de celles-ci et de mettre temporairement Ajax à synchroniser à la place async qui m'a aidé à dépister le problème.

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

Javascript est tellement amusant à déboguer n'est-ce pas? Je ne connais pas d'outils qui vous permettent de surveiller la pile, et d'ajouter des points de rupture pour vérifier les choses. Le meilleur débogueur que j'ai utilisé pour JS est firebug: https://addons.mozilla.org/en-US/firefox/addon/1843/ – Jay

+0

@Jay, j'utilise VS2008 et définissez des points d'arrêt de code JS tout le temps. –

+1

Notez que les méthodes ajax seront difficiles à déboguer en raison de leur nature asynchrone - les appels retournés ne seront pas dans la même pile que les appels invoqués. –

Répondre

8

Firebug est capable de cela. Lorsque le débogueur est en pause, Firebug affiche la pile des appels, qui est l'ensemble des appels de fonction imbriqués en cours d'exécution et en attente de renvoi.

La pile d'appels est représentée sous la forme d'une bande compacte de boutons dans la barre d'outils, chacun portant le nom d'une fonction sur la pile. Vous pouvez cliquer sur n'importe quel bouton pour passer à la ligne où cette fonction est en pause et regarder les variables locales à l'intérieur de cette fonction.

+2

Vous pouvez également utiliser "console.trace()" depuis la console elle-même pour voir la pile d'appels détaillée une fois que le débogueur est en pause. – Rajat

+0

Comment faire une pause au bon moment? Y a-t-il une console.pause? – BuddyJoe

+0

ou devrais-je simplement lancer une alerte à l'intérieur de la fonction en question? – BuddyJoe

1

Vous pouvez également essayer la Libellule d'Opéra (disponible dans toute version récente d'Opera). Je le trouve moins raffiné que Firebug, mais certaines erreurs y sont beaucoup plus explicites.

Questions connexes