2013-09-30 20 views
8

Attualmente sto provando a sviluppare un'app con Worklight Studio 5.0.6 e Dojo (Mobile) 1.8.3. Ho davvero difficoltà a trovare un metodo corretto per il debug. Dopo aver atteso 5-10 minuti per la costruzione di un deploy-processo sul server, un errore di solito si presenta così nel debugger Chrome:Come eseguire il debug di Dojo nel browser?

enter image description here

Come faccio a rintracciare questo errore nel mio fonte? L'intera traccia dello stack è interamente del codice Dojo che genera un messaggio di errore assolutamente inutile dopo 20 livelli di astrazione.

Seriamente, come gestite questo nella vita reale? Quali metodi usi per il debug di app guidate da Dojo nel browser?

Spyro

+1

Hai fornito 'isDebug: true' nel tuo' dojoConfig'? Inoltre, prova a vedere se lo stesso accade in altri browser. Non ho idea del perché, ma a volte altri browser mi forniscono maggiori informazioni. – g00glen00b

risposta

2

Per gli errori dojo.parse, ritengo utile per mettere in pausa il debugger Chrome su tutte le eccezioni (l'icona viola sul tuo screenshot, dovrebbe essere di colore blu). Ottieni di solito maggiori dettagli sulla causa dell'errore, sul nome del nodo DOM che viene analizzato, ecc. Nella prima eccezione che viene sollevata.

Rémi.

2

Il debug dell'applicazione basata su dojo dovrebbe essere uguale al debug di qualsiasi applicazione javascript.

Di solito si attenersi alla seguente procedura:

  1. add console.log() da qualche parte nel codice: questo è veloce e la maggior parte del tempo questo è sufficiente.

  2. punto di interruzione nel debugger: se il passaggio 1 non è sufficiente, è possibile basarsi sulle informazioni di errore per impostare il punto di interruzione prima della riga di errore, quindi procedere o uscire.

  3. commento fuori cambia poco: per qualche errore che è difficile trovare la linea di errore, ad esempio, analizzare l'errore nel tuo caso, il buon modo è commentare il tuo recente cambia uno per uno fino al tuo ultimo versione funzionante. Oppure, torna alla tua ultima versione funzionante, quindi aggiungi il codice uno alla volta.

  4. creare una semplice applicazione per riprodurre l'errore: se l'applicazione è molto complicano ed è difficile per voi a seguire i metodi di cui sopra, si può provare a creare una nuova applicazione che imita l'applicazione attuale, ma con semplici logiche e prova a riprodurre l'errore.

  5. Sulla base dell'esperienza: Alcuni errori, per esempio, in più '' alla fine della serie che funziona a Chrome e Firefox, segnalerà un errore di informazioni senza senso in IE. Eseguire il debug di questi tipi di errori è molto difficile, puoi basarti sulla tua esperienza o fare una ricerca su google.

+1

Grazie per la tua risposta, ma tutto questo non è specifico per Dojo con il suo uso estensivo di callback e codice AMD asincrono in cui semplicemente non sai cosa ha effettivamente causato l'errore (perché la tua "classe" non fa parte dello stack traccia). Non è nemmeno possibile manipolare la tua pagina dalla console javascript a causa di tutti i requisiti mancanti. – spyro

1

Di solito quello che faccio in situazioni del genere è quello di mettere un punto di interruzione all'interno del callback di errore (linea 3398 nel tuo caso) e poi esaminare la variabile di errore ("e").

Non sono sicuro di quanto tu sia familiare con Web Inspector, ma una volta raggiunto il punto di interruzione aprire la console di Web Inspector e verificare le proprietà di errore "e.message" e "e.stack"(basta digitare in 'e.Message' nella console). Inoltre, durante lo sviluppo è meglio evitare l'ottimizzazione Dojo/minification, che migliorano notevolmente la capacità di debug-.

Linea di fondo è quello di cercare di posto .? il punto di interruzione prima che l'errore viene generato

2

hai fornire isDebug: true nel vostro dojoConfig Inoltre, provare a vedere se lo stesso accade in altri browser

Aggiornamento:. recentemente ho scoperto che ci sono problemi con Google Debug di Chrome e Dojo e penso che abbia a che fare con il caricamento asincrono dei file. Come puoi vedere nel fornito screenshot di @spyro, l'oggetto ReferenceError è vuoto (che si può notare a causa delle parentesi vuote {}). Se vuoi risolverlo, riapri la console di Google Chrome, (ad esempio toccando lo F12 due volte). Dopo la riapertura, lo ReferenceError non dovrebbe più essere vuoto e ora è possibile espandere quell'oggetto utilizzando la freccia accanto ad esso e ottenere un messaggio più dettagliato su cosa non è riuscito.