2009-10-23 9 views
6

Sono nuovo in Python e non sono stato in grado di scoprire se questo sia possibile o meno.Debug Python: modifica del codice al volo

Sto utilizzando il plug-in PyDev in Eclipse e in pratica tutto ciò che voglio scoprire è che è possibile modificare il codice mentre si è seduti a un punto di interruzione? Cioè Modifica il codice mentre esegui il debug.

Attualmente mi consente di farlo, ma sembra che stia ancora eseguendo la riga di codice che esisteva in precedenza prima di apportare modifiche.

Inoltre, è possibile trascinare indietro l'esecuzione del programma come è possibile in VBA e C# per esempio?

Se uno di questi è possibile, come posso abilitarli?

risposta

2

Quando si avvia un programma Python, questo verrà compilato in bytecode (e possibilmente salvato come file .pyc). Ciò significa che puoi cambiare la fonte ma poiché non "apri" nuovamente la sorgente, la modifica non verrà ripresa.

Ci sono sistemi come TurboGears (un framework web) che rilevano queste modifiche e si riavviano da sole, ma questo probabilmente confonderà il debugger.

Attualmente non è possibile tornare indietro nel tempo poiché l'interprete bytecode avrebbe bisogno di supporto per questo.

+0

È vero che non si può tornare indietro nel tempo, e anche che il debugger è single-threaded e non può sopportare un riavvio, ma il titolo, "questo non è possibile con Python in questo momento" è impreciso, come @nikow sottolinea. – jMyles

4

PyDev supporta questo aspetto dalla versione 1.4.8, vedere change notes e il corrispondente blog entry.

+0

Non vedo i riferimenti di cui stai parlando. Puoi indicarli in modo più specifico? Sembra interessante; Non ero nemmeno a conoscenza della nuova versione di PyDev finché la tua risposta non ha attirato la mia attenzione, quindi grazie. :-) – jMyles

+0

Ho risolto il secondo link. – nikow

2

È possibile eseguire comandi arbitrari nella console durante il punto di interruzione. Per i miei bisogni, questo in genere raggiunge lo stesso scopo della codifica dal vivo, anche se lo faccio con eleganza come semplicemente usando l'editor.