Site icon Tosolini.info

Odoo: debug con Visual Studio

Questo articolo in realtà è più un aggiornamento di un post già fatto in precedenza nel 2019. Sono però cambiate alcune cose, ad esempio la libreria di riferimento, PTVSD, è stata dismessa. Infatti al suo posto Microsoft ha realizzato DebugPy che è una evoluzione piuttosto interessante, dato che mi ha permesso di creare una App apposita per Odoo.

Come effettuare il debug su Odoo

Il debugger, come per altro avevo evidenziato nel vecchio articolo, si può utilizzare su qualsiasi progetto in Python. Successivamente farò poi esempi più specifici appositamente per Odoo.

Come si installa

Molto semplicemente con il comando PIP o PIP3 di Python

pip3 install debugpy

Come si usa

Si può lanciare da linea di comando, anteponendo il comando debugpy al file o al programma Python che si intende lanciare.

python3 -m debugpy --listen localhost:5678 myfile.py

quindi rispetto al vecchio PTVSD host di destinazione e porta sono unificati in unico parametro. Mentre il resto è sostanzialmente uguale. Si aggiunge una funzione di “attesa” che può essere utile a lanciare il debugger solo quando è il client a collegarsi. Una situazione tipica di programmi più complessi. In quel caso il comando va estenso con –wait-for-client

python3 -m debugpy --listen localhost:5678 --wait-for-client myfile.py

Modalità importazione

Probabilmente rispetto al vecchio progetto, la parte più interessante è che debugpy può essere importato direttamene all’interno del codice Python. In questo caso non è necessario intervenire da terminale con comandi dedicati, ma si può attivare ( e disattivare ) da codice.

import debugpy
debugpy.listen(("0.0.0.0", 5678))

addirittura si possono già pre-impostare dei breakpoint sul codice. O se vogliamo essere più raffinati, impostarli in base a determinate condizioni, ad esempio su una except. Fate attenzione che tra Python 3.6 e 3.7 ci sono delle differenze nel richiamare questa funzione.

#python 3.7
breakpoint()
#python =< 3.6
debugpy.breakpoint()

Log

Infinte è possibile anche creare il log del debugger, nel caso iniziale il comando va espanso con:

import debugpy
debugpy.log_to('path/to/log')
debugpy.listen(("0.0.0.0", 5678))

oppure aggiungendo alla linea di comando –log-to /path/to/log subito dopo debugy

python3 -m debugpy --log-to /path/to/log --listen localhost:5678 myfile.py

Visual Studio Code

Su Visual Studio Code (VSC) va attivato il debug sulla specifica sezione, oppure premendo il tasto F5. Prima però è necessario configurare l’azione affinché la porta 5678 venga intercettata per l’ascolto. Nella sezione di debug, in alto sul selettore “Eseguii con Debug” (CTRL + Maiuscole + D) è presente una icona a forma di ingranaggio. Se non è mai stato impostato vedrete la richiesta obbligatoria al fine di creare un file “launch.json” che contenga le direttive.

Nella fase di creazione vengono già proposti dei template, tuttavia nel caso di debugpy, come anticipato, va messa in ascolto la porta 5678. Questo può avvenire anche su un server remoto, purché ovviamente abbiate modo di raggiungere sia l’IP che la porta. Di seguito un esempio di debug su file corrente, all’interno della finestra di Visual Studio (che può essere in locale sulla vostra macchina, o in remoto con SSH) e l’esempio che ci interessa, ovvero il debug mettendoci in ascolto sulla porta 5678, che ho chiamato “Debugpy“.

Nel caso di Odoo, visto che il codice, come abbiamo visto, può essere inserito come sviluppo, ho creato su questa Repository di Github, un modulo che carica il debugger all’avvio di Odoo. Da utilizzare quindi in ambienti di sviluppo e test dove sappiamo andremo a dover usare questi utilissimi strumenti per risolvere problemi che altrimenti sarebbero quasi impossibili da trovare e risolvere. In sostanza la APP fa leva sul modulo contatti (res.partners) che di solito è generalmente caricato. Infatti al suo caricamento automaticamente apre la porta 5678 che potremo intercettare.

{
 "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: File corrente",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        },
        {
            // Esempio di un debug server via Remote SSH"name": "Python: Debugpy",
            "type": "python",
            "request": "attach",
            "port": 5678,
            "host": "10.0.0.1",
        }
    ]
}

Una volta avviato il debugger (tasto F5) se poniamo dei breakpoint sul codice (un click che attiva il pallino rosso sul numero di linea del codice nel punto che ci interessa) non appena viene caricata la pagina, o caricato il codice Python, questo si ferma al punto che abbiamo indicato. Sulla sinistra di VSC avremo a disposizione tutte le variabili fin li processate, le espressioni di controllo e lo stack delle chiamate.

Impostazione del breakpoint

E’ importante ricordarsi di modificare l’IP dell’Host con quello in cui si vuole effettuare il debbugging. Si tratta per chi vuole programmare in Python con l’ausilio di Visual Studio Code, di un passaggio obbligato.

Esempio di variabili che possiamo vedere una volta attivato il breakpoint

Exit mobile version