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.