2014-12-11 10 views
6

Se utilizzo il debugger, la maggior parte delle volte voglio solo vedere cosa fa l'interprete nel mio codice. Voglio scavalcare tutto il codice del framework e delle librerie che uso.Python Debugger che supporta Black Boxing?

AFAIK questo si chiama Black Boxing.

Come posso farlo con Python ipdb o un altro debugger Python?

Immaginate questo:

Io uso un quadro ORM, che mi fido, e non vogliono eseguire il debug.

cut_hair_method(orm_object.user) 

Il metodo cut_hair_method() è mio, e voglio eseguire il debug.

Il orm_object proviene dal framework che utilizzo. Il debugger entrerà nel codice orm e farà alcune cose speciali, che non mi interessano. Non ho modo di dire al debugger: non saltare nel codice orm!

Aggiornamento

Per il mio caso sarebbe molto facile decidere quale codice dovrebbe essere nella scatola nera, e che il codice non è: Codice in $VIRTUAL_ENV/src/ non è nella scatola nera, tutti gli altri il codice è. Tranne che io dico esplicitamente al debugger qualcos'altro.

Update2

ho il nome di "Black Boxing" da questo articolo: https://hacks.mozilla.org/2013/08/new-features-of-firefox-developer-tools-episode-25/

+0

Qualsiasi buon debugger sarà caratterizzato da "step over" comandi. Black-Boxing è molto più di un semplice debug. Black-boxing è un'idea incentrata su come testare (e non eseguire il debug) le applicazioni. –

+0

Ho aggiunto un esempio. AFAIK "step over" non è possibile ovunque. – guettli

+1

Invece di usare step-over se questo non funziona per te - perché non impostare un punto di interruzione nel 'cut_hair_method, e poi eseguire .... Mi sembra di ricordare che l'IDE IDE aveva una lista nera di moduli da non passare , ma mi sembra anche di ricordare che non ha funzionato troppo bene (quando l'ho usato diversi anni fa - potrei sbagliarmi però). –

risposta

4

Il Python classe base debugger (bdb.Bdb) ha un un attributo .skip, dando una lista di nomi di moduli di saltare. È possibile fornire questo elenco durante l'istanziazione del debugger o in seguito. Se si desidera fornire un elenco negativo (elenco di moduli che sono i propri), o altrimenti calcolare se un modulo debba essere saltato, è possibile creare una sottoclasse della classe debugger e sovrascrivere is_skipped_module.