impostazione dei punti di interruzione con l'opzione nosetests --pdb


88

nosetests --pdbfammi fermare in caso di errore o fallimento, ma è troppo tardi per le mie esigenze. Passare attraverso il codice durante l'esecuzione mi aiuta a eseguire il debug in cui si trova il problema.

Tuttavia, i nosetest sono utili in quanto consentono test che si basano su importazioni relative (cioè test in un pacchetto).

Come posso impostare i punti di interruzione prima che i test vengano eseguiti? Attualmente sto utilizzando:

python -m pdb /path/to/my/nosetests testfile.py

Questa soluzione non è adeguata. I test noset interferiscono con l'output pdb ei controlli della mia tastiera (ad esempio i tasti freccia) sono interrotti.

Utilizzando import pdb; pdb.set_trace () sembrerebbe una buona idea, tuttavia nosetests sta bloccando il mio accesso alla console pdb.

Risposte:


118

Puoi aggiungere

import pdb; pdb.set_trace() 

in qualsiasi punto della sorgente che desideri interrompere nel debugger.

Assicurati di passare -sal naso in modo che non catturi stdout.


Stavo per aggiungere questo alla mia domanda. Anche questa non è una soluzione accettabile. Quando si utilizza questo con nosetest, è evidente che è letteralmente inutilizzabile poiché l'accesso alla console pdb è schermato e non è possibile eseguire alcun comando pdb.
Devin

25
Aggiungi il flag -s a nosetests per evitare che catturi lo stdout e sarai in grado di usare pdb senza problemi.
Ned Batchelder

1
Non funziona. Usa questo:from nose.tools import set_trace; set_trace()
anilbey

142

Ancora meglio che ricordarsi di usare -sè usare la set_tracevariante fornita con Nose. Inserisci

from nose.tools import set_trace; set_trace()

ovunque desideri entrare nel debugger. Il reindirizzamento stdin / out sarà curato per te. L'unico strano effetto collaterale in cui mi sono imbattuto è l'incapacità di riavviare il codice dall'interno di pdb (usando run) durante il debug durante una corsa al naso.


C'è qualche documentazione di questo? Come uscire dal giro?
AJ

Intendi come navigare una volta che sei in pdbesecuzione? Sono sicuro che ci sono documenti, ma dalla parte superiore della mia testa- s"passa" a una chiamata di funzione, npassa all'istruzione "successiva", usposta "su" lo stack e si dsposta "giù". È possibile utilizzare bper impostare i punti di interruzione e cper "continuare" e chiudere il debugger stepping. Spero che aiuti!
Matt Luongo

4
Questa dovrebbe essere la risposta accettata. Fornisce tutte le normali funzionalità del comando pdb.set_trace () originale.
tbm

Qualche possibilità per una versione ipython / ipdb di questo?
gerrit

5

Se hai ipython , per un utilizzo illimitato di suggestioni:

import ipdb; ipdb.set_trace() 

* meraviglia illimitata: proprio come ipython: completamento automatico, colorazione ecc.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.