2013-01-09 22 views
5

A volte uso gdb per eseguire il debug degli script Python (CPython ovviamente). In genere è utile eseguire il debug di core dump (e quando coinvolge i moduli di estensione c).Come impostare un punto di interruzione su una funzione python in gdb

Una domanda di base è come impostare il punto di interruzione su una funzione python in gdb. Diciamo che ho uno script python con la funzione foo e voglio rompere subito dopo che viene chiamato foo. Immagino che l'impostazione di un breakpoint condizionale su PyEval_EvalFrameEx potrebbe funzionare, ma non sono sicuro di come farlo.

risposta

1

Utilizzando la tecnica che ha suggerito, questo funziona (anche se non è abbastanza):

break PyEval_EvalFrameEx if (strcmp((((PyStringObject *)(f->f_code->co_name))->ob_sval), "foo") == 0) 

Qui, f è un PyFrameObject. Potresti anche voler controllare f->f_code->co_filename per assicurarti di avere il file giusto. Nota che questo rallenta un po 'il programma, dal momento che stai rompendo e confrontando parecchio.

GDB 7 ha alcune macro di aiuto per trattare con CPython, ma non ho familiarità con loro. C'è probabilmente un modo più bello per realizzare ciò che stai cercando con quelli.

Problemi correlati