From Fedora Project Wiki

Facilitato il Debug in Python

Sommario

Il debugger gdb è stato esteso in modo da poter riportare informazioni dettagliate sul runtime di Python 2 e Python 3.
I backtrace all'interno di codice Python ora in modo predefinito visualizzano informazioni miste C e Python sul modo di esecuzione dei processi, senza richiedere grande esperienza nell'uso di gdb. Si ritiene che questa possibilità sia unica in Fedora, e sarà apprezzata dai programmatori Python, potendo avere ulteriori informazioni sui loro processi CPython.

Progettista

Stato corrente

Per informazioni aggiornate sullo stato di Debugging in Python pià facile consultare la pagina originale.

Descrizione dettagliata

Numerose librerie implementate in C/C++ vengono utilizzate in Python, impiegando certe interfacce. I bug, presenti nelle librerie o dovuti al loro scorretto uso, possono causare backtrace complicati da visualizzare in gdb, e rendere difficile capire il problema a livello python.
Quando si usano librerie native C/C++, è piuttosto frequente, a causa di qualche bug presente nella libreria, la comparsa di errori SIGSEGV che immediatamente causano la terminazione del processo python. Ancora, una gestione degli errori scarsamente progettata in tali librerie fa uso di assert() o abort() a livello C, che immediatamente terminano l'intero processo. Sarebbe molto utile invece poter capire cosa sia realmente successo.

Python usa già uno strumento di debug che permette di ricavare notevoli informazioni sull'ambiente in esecuzione a livello CPython (vedere gdbinit file), ed è distribuito con il pacchetto di sviluppo python-devel. Copiando il file nella propria ~/.gdbinit è possibile usare pyframe ed altri comandi per operazioni di debug, e individuare le varie posizioni nel codice python usando gdb. Tuttavia questo modo di effettuare un debug presenta degli inconvenienti:

  • Lo script non è molto robusto
  • E' necessario entrare ed eseguire i comandi in gdb manualmente, e ciò richiede una certa abilità/esperienza; ogni errore commesso in queste fasi tipicamente genera un SIGSEGV nel processo sottostante
  • Lo script è implemetato nel linguaggio usato da gdb e perciò è difficile da usare ed estendere

gdb, invece, dovrebbe fornire complete informazioni sull'ambiente d'esecuzione Python in maniera automatica. Con questo progetto si propone appunto di realizzare ciò usando gdb-archer, ossia:

  • Visualizzare automaticamente le informazioni fornite da PyEval_EvalFrameEx nei backtrace di gdb, includendo in ABRT:
    • file sorgente, numerazione righe e nomi delle funzioni
    • valori delle variabil locali, se disponibili
  • nome della funzione che ingloba funzioni C

Per esempi tipici di debug di codice CPython, e per ulteriori dettagli riguardanti questo progetto, consultare la pagina originale di questo documento.

Vantaggi per Fedora

I backtrace di gdb (come quelli di ABRT) che involvono codice Python visualizzeranno le informazioni al livello Python, come pure a livello C.
Questo vuol dire che è più facile per i programmatori leggere i backtrace quando una libreria inglobata da Python incontra un bug (p.e. PyGTK).

Per i programmatori, dovrebbe essere possibile usando gdb, aggianciarsi ad un processo python in esecuzione ed eseguire
thread apply all backtrace per visualizzare l'intero codice C e Python in esecuzione in tutti i thread del processo - si ritiene che questa possibilità sia unica in Fedora, e sarà apprezzata dai programmatori Python potendo avere ulteriori informazioni visibili sui loro processi CPython.

Note di rilascio

Il debugger gdb è stato esteso in modo da poter riportare informazioni dettagliate sul runtime di Python 2 e Python 3.
Il backtrace all'interno di codice Python ora in modo predefinito visualizza informazioni miste C e a livello-Python sul modo di esecuzione dei processi, senza richiedere grande esperienza nell'uso di gdb.

Altre informazioni

Per:

  • Obiettivi
  • Test Plan
  • Esperienza Utente
  • Dipendenze
  • Progetto corrente
  • Documentazione
  • Commenti e Discussioni

consultare la pagina originale di questo documento.