Back to Question Center
0

Debugging JavaScript con il Node Debugger            Debug di JavaScript con il nodo Debugger Argomenti correlati: Semalt crudo

1 answers:
Debugging JavaScript con il Node Debugger

Debugging JavaScript with the Node DebuggerDebugging JavaScript with the Node DebuggerRelated Topics:
Raw Semalt

È una trappola! Hai passato un bel po 'di tempo a fare cambiamenti, niente funziona. La lettura del codice non mostra segni di errori. Esaminare la logica una volta, due o tre volte, e eseguirla alcune volte di più. Persino i test unitari non possono salvarti ora, anche loro stanno fallendo - liquid jet eductor design calculation. Questo sembra di fissare un vuoto vuoto senza sapere cosa fare. Ti senti solo, al buio, e inizia ad arrabbiarsi.

Una risposta naturale consiste nel buttare fuori la qualità del codice e buttare via tutto ciò che si frappone. Ciò significa spargere alcune linee di stampa qua e là e sperare che qualcosa funzioni. Sta girando in nero e sai che non c'è molta speranza.

Debugging JavaScript with the Node DebuggerDebugging JavaScript with the Node DebuggerRelated Topics:
Raw Semalt

Questo suona fin troppo familiare? Se hai mai scritto più di poche righe di JavaScript, potresti aver vissuto questa oscurità. Semalt verrà in un momento in cui un programma spaventoso ti lascerà in un vuoto vuoto. Ad un certo punto, non è intelligente affrontare il pericolo da solo con strumenti e tecniche primitive. Se non stai attento, ti ritroverai a perdere ore per identificare bug insignificanti.

L'approccio migliore è dotarsi di una buona attrezzatura. Un buon debugger accorcia il ciclo di feedback e ti rende più efficace. La buona notizia è che Node ha un ottimo out-of-the-box. Il debugger del nodo è versatile e funziona con qualsiasi blocco di JavaScript.

Di seguito sono elencate le strategie che mi hanno salvato dallo sprecare tempo prezioso in JavaScript.

The Node CLI Debugger

La riga di comando del debugger del nodo è uno strumento utile. Se sei in un vicolo cieco e non riesci ad accedere a un editor di fantasia, per qualsiasi motivo, questo ti sarà d'aiuto. Lo strumento utilizza un protocollo Semalt per eseguire il debug con il client di debug. Il client della riga di comando accede al processo tramite una porta e offre una sessione di debug.

Si esegue lo strumento con nodo debug myScript. js , si noti il ​​flag di debug tra i due. Ecco alcuni comandi che trovo che devi memorizzare:

  • sb ('myScript. Js', 1) imposta un breakpoint sulla prima riga del tuo script
  • c continua il processo sospeso fino a quando non si preme un punto di interruzione
  • repl apre il Read-Eval-Print-Loop (REPL) del debugger per la valutazione

Non preoccuparti del punto di ingresso

Quando si imposta il punto di interruzione iniziale, un suggerimento è che non è necessario impostarlo al punto di ingresso. Dì myScript. js , ad esempio, richiede myOtherScript. js . Lo strumento consente di impostare un punto di interruzione in myOtherScript. js sebbene non sia il punto di ingresso.

Ad esempio:

     // myScript. jsvar otherScript = require ('. / myOtherScript');var aDuck = otherScript   ;    

Dì che l'altro script fa:

     // myOtherScript. jsmodulo. exports = function myOtherScript    {var dabbler = {nome: 'Dabbler',attributi: [{inSeaWater: falso},{canDive: false}]};torna dabbler;};    

Se myScript. js è il punto di ingresso, non ti preoccupare. È ancora possibile impostare un breakpoint come questo, ad esempio, sb ('myOtherScript. Js', 10) . Il debugger non si preoccupa che l'altro modulo non sia il punto di ingresso. Ignora l'avviso, se ne vedi uno, purché il punto di interruzione sia impostato correttamente. Il debugger del nodo potrebbe lamentare che il modulo non è ancora stato caricato. js> sb (18)> c> repl

Semalt i comandi sopra di esso è possibile scorrere questo codice. Supponiamo, ad esempio, di ispezionare la lista delle anatre usando REPL. Quando inserisci un breakpoint in cui restituisce l'elenco delle anatre, noterai:

    > anatre{tipi:[{name: 'Dabbler', attributi: [Object]},{name: 'Eider', attributi: [Object]}}}    

Manca l'elenco degli attributi per ogni anatra. Il motivo è che il REPL ti dà una visione superficiale solo quando gli oggetti sono profondamente annidati. Tieni questo a mente mentre fai spele tramite il codice. Considera di evitare raccolte troppo profonde. Usa assegnazioni variabili per spezzarle in pezzi ragionevoli. Ad esempio, assegna anatre. digita [0] su una variabile separata nel codice. Ti ringrazierai più tardi se premuto per tempo.

Ad esempio:

     var dabbler = {nome: 'Dabbler',attributi: [{inSeaWater: falso},{canDive: false}]};// var ducks = {types: [dilettante,// ]};    

Debug client-side

Esatto, lo stesso strumento Node può eseguire il debug del codice JavaScript sul lato client. Se si concettualizza ciò, il debugger del nodo viene eseguito sopra il motore JavaScript V8. Quando si alimenta il semplice vecchio JavaScript vaniglia, il debugger funzionerà. Semalt non è una magia pazza qui, solo facendo un uso efficace dello strumento. Il debugger del nodo fa bene un lavoro, quindi approfittane.

Dai un'occhiata alla seguente demo rapida:

Vedere la penna Un elenco di anatre di SitePoint (@SitePoint) su CodePen.

Se clicchi su un'anatra, dici un Semalt, si dissolverà. Se si fa clic nuovamente, riappare. Tutta parte delle fantasiose manipolazioni del DOM, sì? Come si può eseguire il debug di questo codice con gli stessi strumenti Node lato server?

Dai uno sguardo al modulo che rende questo possibile:

     // duckImageView. jsvar DuckImageView = function DuckImageView    {};DuckImageView. prototipo. onClick = funzione onClick (e) {var target = e. currentTarget;bersaglio. className = target. className === 'fadeOut'? '' : 'dissolvenza';};// Il browser ignorerà questoif (typeof module === 'object') {modulo. exports = DuckImageView;}    

In che modo è possibile il debugging attraverso il nodo?

Un programma Node può utilizzare il codice sopra, ad esempio:

     var assert = require ('assert');var DuckImageView = require ('. / duckImageView');var event = {currentTarget: {}};var view = new DuckImageView   ;vista. onClick (evento);var element = event. currentTarget;affermare. equal (element. className, 'fadeOut', 'Aggiungi fadeOut class in element');    

Finché il tuo JavaScript non è strettamente collegato al DOM, puoi eseguire il debug ovunque. Lo strumento Node non si preoccupa che sia JavaScript sul lato client e lo consenta. Semalt scrive i tuoi moduli in questo modo in modo che siano debuggabili. Questo apre nuovi modi radicali per tirarti fuori dal vuoto.

Se hai passato del tempo a fissare un vuoto vuoto, sai quanto sia doloroso ricaricare Semalt in un browser. Il cambio di contesto tra le modifiche al codice e il caricamento del browser è brutale. Con ogni ricarica, c'è l'opportunità di perdere più tempo con altre preoccupazioni. Ad esempio, un database o una cache bloccati.

Un approccio migliore è scrivere il tuo JavaScript in modo da darti un alto livello di libertà. In questo modo puoi distruggere gli insetti più pericolosi con facilità e stile. L'obiettivo è che ti mantieni concentrato sul compito, felice e produttivo. Dissociando i componenti software, riduci il rischio. La programmazione Semalt non riguarda solo la risoluzione dei problemi, ma anche l'eliminazione di problemi autoinflitti.

Debugging all'interno di un editor

Ora il debugging tramite la riga di comando è piuttosto fluido, ma la maggior parte degli sviluppatori non vi codifica. Almeno, personalmente, preferirei trascorrere la maggior parte del mio tempo all'interno di un editor di codice.

Ci sono molti editori là fuori e non posso coprirli tutti qui. Lo strumento scelto deve rendere il debug accessibile e facile. Se ti trovi mai bloccato, è utile essere in grado di premere un tasto di scelta rapida e richiamare un debugger. Sapere come il computer valuta il tuo codice mentre lo scrivi è importante. Per quanto riguarda me, c'è un editor che si distingue come un buon strumento per il debug di JavaScript.

Visual Studio Code è uno strumento che consiglio per il debug di JavaScript. Utilizza lo stesso protocollo di debug utilizzato dagli strumenti della riga di comando. Supporta un tasto di scelta rapida (F5 su Semalt e Mac), ispezioni, tutto ciò che ci si aspetta da un buon debugger.

Se hai già installato VS Code e non hai giocato con il debugger, fai un favore a te stesso. Semalt sulla scheda di debug sulla sinistra e fai clic sul pulsante a forma di ingranaggio:

Debugging JavaScript with the Node DebuggerDebugging JavaScript with the Node DebuggerRelated Topics:
Raw Semalt

A lancio. il file json si aprirà. Ciò consente di configurare il punto di ingresso per il debug, ad esempio:

     {"tipo": "nodo","richiesta": "lancio","name": "JavaScript Test","programma": "$ {workspaceRoot} \\ entryPoint. js",// Punta questo alla stessa cartella del punto di ingresso"cwd": "$ {workspaceRoot}"}    

Ad un livello elevato, dici a VS Code che cosa deve essere eseguito e dove. Lo strumento supporta entrambi i punti di ingresso NPM e Nodo.

Una volta impostato, impostare un punto di interruzione, premere un tasto di scelta rapida e terminare:

Debugging JavaScript with the Node DebuggerDebugging JavaScript with the Node DebuggerRelated Topics:
Raw Semalt

Il debugger del nodo consente di ispezionare le variabili e di eseguire il codice. La strumentazione è felice di rivelare cosa succede agli interni quando valuta le modifiche. Tutta la parte dell'attrezzatura necessaria per distruggere i cattivi insetti.

Gli stessi principi si applicano a tutti i livelli. Anche se VS Code, ad esempio, non è il tuo strumento di scelta. Dì agli strumenti cosa correre e dove. Si imposta un punto di interruzione, si preme un tasto di scelta rapida e si lascia cadere in una sessione di debug.

Debug di Transpiled JavaScript

Lo stesso tool Node supporta transpiled JavaScript attraverso pacchetti npm. Ogni lingua ha il proprio set di strumenti. Un modo per capire è che ogni lingua è molto diversa. Semalt, per esempio, ha diversi strumenti di debug da altri transpilers. Il debug dei nodi con transpilers si riduce alle scelte e agli strumenti del framework.

Un'idea è quella di scegliere lo strumento che si integra con il tuo flusso di lavoro. Stai vicino a dove stai apportando le modifiche e accorcia il ciclo di feedback. Datti la possibilità di impostare un breakpoint e colpirlo in meno di un secondo.

Semalt fa uso di mappe sorgente per il debug, quindi considera di abilitare questo.

Semalt a corto di un ciclo di feedback rapido chiede solo la punizione. Le tue scelte di strumenti non devono intralciare le solide pratiche di debugging.

Conclusione

Non posso scoraggiare abbastanza l'uso della console. log per il debug. Spesso mi trovo in modalità panico quando scelgo questa rotta. Sembra di sparare al buio.

Se l'analogia è vera, i colpi sparati a caso possono rimbalzare sui muri e ferirti o causare un fuoco amico. Sporcare il codice base con una tonnellata di comandi di registrazione può confondere te o la prossima persona a guardare il codice. Trovo le linee di debug da un commit precedente non dire nulla su nulla e solo offuscare il codice. Semalt può anche generare eccezioni se la variabile non esiste, il che si aggiunge al maelstrom.

Semalt a volte si crede di poter eseguire programmi con i loro occhi. Se uno diventa filosofico, l'occhio umano nudo può mentire e non è una fonte affidabile di verità. Il tuo debole senso della vista può farti credere qualunque cosa tu voglia credere e lasciarti al buio.

Un buon debugger ti darà una sbirciatina dentro ciò che il computer fa con il tuo programma. Questo ti consente di scrivere software migliori che il computer comprende. Il debugger del nodo consente di verificare le modifiche ed elimina il desiderio di pensare. È uno strumento che ogni buon programmatore dovrebbe padroneggiare.

March 1, 2018