2010-07-15 15 views
8

During web searching, ho trovato il seguente commento: È ancora possibile utilizzare le pratiche di debug di Lisp tradizionali.Debug di codice Lisp

  • Quali sono le pratiche di debug tradizionale?
  • Normalmente, quali strumenti vengono utilizzati per il debug del lisp (con/senza emacs)?
+5

@ rlb.usa I dont sapere cosa costituisce un "linguaggio giocattolo", ma Lisp è stato utilizzato in diversi sistemi di pianificazione logistica dall'esercito americano, è stato schierato per il controllo di veicoli spaziali (e anche da remoto), in diversi sistemi di IA e AI, e dietro ITA Software, la ricerca enginge per voli low cost, appena acquistata da google per $ 700 milioni. –

+0

SLIME è un ambiente di sviluppo __awesome__ per CL eseguito su Emacs. Non uso mai nessun altro REPL per CL. – Jyaan

risposta

4

Non so cosa intendesse specificamente Bill, ma IME:

Tipicamente il vostro editor avrà un'istanza in esecuzione ad esso collegati. Puoi compilare immediatamente le funzioni per inserirle nell'immagine in esecuzione - poiché Lisp ha il proprio compilatore, stai solo dicendo all'immagine corrente di leggere e compilare una piccola sezione di testo. Oppure puoi eseguire direttamente le funzioni, per vedere cosa fanno.

Quando viene lanciata un'eccezione (o viene segnalata una condizione, se si è abbastanza fortunati da trovarsi in un dialetto con condizioni), il debugger mostrerà la traccia dello stack e consentirà di decidere come continuare.

La principale differenza tra Lisp e altri linguaggi compilati di alto livello è che in Lisp si sta praticamente sempre scrivendo il codice con il debugger allegato.

0

Fondamentalmente solo cose come aggiungere codice per stampare i valori mentre viene eseguito in modo da poter vedere cosa sta succedendo.

+0

Sounds lika a C# programmer .. (è un complimento) – Flinkman

3

Esegui edebug-defun in emacs e vedrai che il lisp è magico.

4

Mentre il clojure è stato taggato nella domanda, darò la nostra prospettiva.

I file di classe generati dal compilatore clojure includono informazioni di debug su linea e metodo, pertanto qualsiasi debugger java interagirà direttamente con il codice clojure, compresi i punti di interruzione e l'ispezione dell'oggetto.

Se si utilizza emacs/slime come ambiente di sviluppo, l'integrazione con il debugger di slime è stata recentemente inclusa. Poiché la documentazione è un po 'scarsa, è probabilmente meglio controllare direttamente l'ambito del supporto su github.

2

In qualcosa che definirei avvicina ad una "tradizionale serie di tecniche di debug Lisp" sono:

  • stampe debug
  • funzione di traccia (ogni chiamata una funzione tracciata viene stampato con una rientranza corrispondente per chiamare la profondità, al reso viene stampato il valore di ritorno ).
  • esplicita invocazione del debugger in-immagine
  • finire nel debugger in-immagine a causa di un bug (il tentativo di aggiungere un intero e un simbolo, per esempio)