Debugging/it



Prova preliminare
Prima di provare il debug usare la La struttura di Test (test framework - macro) per verificare se i test standard funzionano correttamente. Se non funzionano, è possibile che l'installazione sia danneggiata.



Riga di comando
Il debug di FreeCAD è supportato da alcuni meccanismi interni. La versione a riga di comando di FreeCAD fornisce delle opzioni di supporto del debug:

Queste sono le opzioni attualmente riconosciute in FreeCAD 0.19:

Opzioni generiche:

-v [ --version ]       Stampa la stringa della versione -h [ --help ]          Stampa un messaggio di aiuto -c [ --console ]       Si avvia in modalità console --response-file arg    Può essere specificato anche con '@name' --dump-config          Scarica la configurazione --get-config arg       Stampa il valore della chiave di configurazione richiesta

Configurazione: -l [ --write-log ]       Scrive un file di registro in: $HOME/.FreeCAD/FreeCAD.log (Linux) $HOME/Libreria/Applicazione\Supporto/FreeCAD/FreeCAD.log (macOS) %APPDATA%\FreeCAD\FreeCAD.log (Windows) --log-file arg           Diversamente da --write-log, questo consente di accedere a un file archivio arbitrario -u [ --user-cfg ] arg    File di configurazione utente per caricare/salvare le impostazioni utente -s [ --system-cfg ] arg  File di configurazione del sistema per caricare/salvare le impostazioni di sistema -t [ --run-test ] arg    Test case - o 0 per tutti -M [ --module-path ] arg Percorsi di moduli aggiuntivi -P [ --python-path ] arg Percorsi Python aggiuntivi --single-instance        Consente di eseguire una singola istanza dell'applicazione



Generare un Backtrace
Se si esegue una versione sperimentale di FreeCAD ancora in fase sviluppo, essa potrebbe "bloccarsi". Si può aiutare gli sviluppatori a risolvere questi problemi fornendo loro un "backtrace". Per fare questo, è necessario eseguire un "debug build" del software. "Debug build" è un parametro che viene impostato al momento della compilazione, perciò bisogna auto-compilare FreeCAD, oppure ottenere una versione "debug" precompilata.



Per Linux
Linux Debugging →

Prerequisiti:


 * pacchetto software gdb installato
 * un debug build di FreeCAD (in questo momento disponibili solo per la compilazione di Debug)
 * un modello di FreeCAD che causa un crash

Passaggi:

Immettere quanto segue nella finestra del terminale:

Trova il codice binario di FreeCAD sul tuo sistema:

LLDB produrrà alcune informazioni di inizializzazione. Il (lldb) mostra che il debugger è in esecuzione nel terminale, ora inserisci::

Ora FreeCAD viene avviato. Effettuare le operazioni che causano il crash o il blocco di FreeCAD, quindi immettere 'bt' nella finestra del terminale.

Questo genera una lunga lista che descrive esattamente ciò che il programma stava facendo quando è andato in crash o in blocco. Includere questa lista nel vostro rapporto sul problema.

Stampa anche i valori delle variabili locali. Questo può essere combinato con un numero per limitare il numero di frame mostrati.



Per macOSX
macOSX Debugging →

Prerequisiti:


 * pacchetto software lldb installato
 * un debug build di FreeCAD
 * un modello di FreeCAD che causa un crash

Passaggi:

Immettere quanto segue nella finestra del terminale:

LLDB produrrà alcune informazioni di inizializzazione. Il (lldb) mostra che il debugger è in esecuzione nel terminale, ora inserisci:

Ora FreeCAD viene avviato. Effettuare le operazioni che causano il crash o il blocco di FreeCAD, quindi immettere 'bt' nella finestra del terminale.

Questo genera una lunga lista che descrive esattamente ciò che il programma stava facendo quando è andato in crash o in blocco. Includere questa lista nel vostro rapporto sul problema.



Elencare le librerie caricate da FreeCAD
(Applicabile a Linux e macOS)

A volte è utile capire quali librerie sta caricando FreeCAD, in particolare se ci sono più librerie caricate con lo stesso nome ma versioni diverse (collisione di versioni). Per vedere quali librerie vengono caricate da FreeCAD quando si arresta in modo anomalo, è necessario aprire un terminale ed eseguirlo nel debugger. In una seconda finestra del terminale, scopri l'id del processo di FreeCAD:

Usa l'id restituito e passalo a :

Questo stampa un lungo elenco di risorse caricate. Quindi, ad esempio, se si tenta di verificare se è caricata più di una versione della libreria Coin3d, scorrere l'elenco o cercare direttamente Coin nell'output:



Eliminare errori Python
Per un approccio più moderno al debug di Python, almeno su Windows, vedere questo
 * | post nel Forum.
 * Python workbenches debugging
 * python3.dll, Qt5Windgets.dll, Qt5Gui.dll and Qt5Core.dll not found

winpdb
winpdb Debugging →

Ecco un esempio dell'uso di "Winpdb" all'interno di FreeCAD:

Abbiamo bisogno del debugger di Python: "Winpdb". Se non lo hai installato, su Ubuntu/Debian installalo con:

Ora consente di impostare il debugger.


 * 1) Start Winpdb.
 * 2) Imposta la password del debugger su "test": vai al menu "File" → "Password" e imposta la password.

Ora eseguiremo uno script Python di prova in FreeCAD passo dopo passo.


 * 1) Eseguire winpdb e impostare la password (ad esempio test)
 * 2) Creare un file Python con questo contenuto


 * 1) Avviare FreeCAD e caricare il file precedente in FreeCAD.
 * 2) Premere F6 per eseguirlo.
 * 3) Ora FreeCAD non risponde perché il debugger Python è in attesa
 * 4) Passare alla GUI di Windpdb e cliccare su "Attach". Dopo pochi secondi appare una voce "" su cui si deve fare doppio clic.
 * 5) Ora in Winpdb viene visualizzato lo script attualmente in esecuzione.
 * 6) Impostare un break nell'ultima riga e premere F5.
 * 7) Ora premere F7 per entrare nel codice Python di Draft.makeWire

Visual Studio Code (VS Code)
VS Code Debugging →

Prerequisiti:


 * Il pacchetto ptvsd deve essere installato in un Python 3 al di fuori di FreeCAD, quindi il modulo deve essere copiato nella cartella della libreria Python di FreeCAD.

pypi page

Documentazione di Visual Studio Code per il debug remoto

Passi:
 * Aggiungi il seguente codice all'inizio del tuo script


 * Aggiungi una configurazione di debug nel codice di Visual Studio.
 * La configurazione dovrebbe assomigliare a questa:

"configurations": [ {           "name": "Python: Attacher", "type": "python", "request": "attach", "port": 5678, "host": "localhost", "pathMappings": [ {                   "localRoot": "${workspaceFolder}", "remoteRoot": "." }           ]        },


 * In VS Code aggiungi un breakpoint dove vuoi.
 * Avvia lo script in FreeCAD. FreeCAD si blocca in attesa dell'allegato.
 * In VS Code avviare il debug utilizzando la configurazione creata. Si dovrebbero vedere le variabili nell'area del debugger.
 * Quando si impostano i punti di interruzione, VS Code segnalerà di non trovare il file .py aperto nell'editor di VS Code.
 * Cambiare "remoteRoot": "." to "remoteRoot": " "
 * Ad esempio, se il file Python risiede in /home/FC_myscripts/myscript.py
 * Cambiare in: "remoteRoot": "/home/FC_myscripts"
 * Se si sta solo eseguendo il debug delle macro di FreeCAD dalla cartella delle macro di FreeCAD e quella cartella è "C:/Users/ /AppData/Roaming/FreeCAD/Macro", usare:
 * "localRoot": "C:/Users/ /AppData/Roaming/FreeCAD/Macro",
 * "remoteRoot": "C:/Users/ /AppData/Roaming/FreeCAD/Macro"
 * Se la macro non riesce a trovare ptvsd nonostante l'abbia installata da qualche parte, far precedere 'import ptvsd' con

Dove si trova il percorso della directory in cui è stato installato ptvsd. Nel package Mac è /Applications/FreeCAD.App/Contents/Resources/bin/python.
 * Sul bordo in basso a sinistra di VSCode si può scegliere l'eseguibile Python: è meglio impostarlo alla versione installata con FreeCAD.

E' possibile individuarlo sul proprio sistema digitando

nella console Python di FreeCAD.



Con LiClipse e AppImage
LiClipse Debugging →


 * Estrarre AppImage.


 * La posizione sqashfs-root è il punto in cui il debugger viene successivamente collegato.


 * Assicurarsi di poter avviare una sessione di FreeCAD dalla posizione squashfs-root.


 * Si dovrebbe avviare una sessione della riga di comando di FreeCAD.


 * Installare.
 * Viene fornito pronto con pydev e dispone di programmi di installazione per tutte le piattaforme.
 * Per Linux è sufficiente estrarlo (in qualsiasi posizione) ed eseguire.


 * Configure liclipse for debugging.
 * Right-click pydev icon (upper right corner) and choose customize.
 * Activate "PyDev Debug" (through checkbox, or it might be needed to go to tab "Action Set Availability" and activate there first).
 * In the pydev menu you can now choose "start debug server".
 * Use menu window/open perspective/other > debug.
 * Right-click debug icon (upper right corner) and choose customize.
 * Checking "Debug" brings the debugging navigation tools to the toolbar.
 * Open preferences through menu window/preferences.
 * In PyDev/Interpreters add "new Interpreter by browsing".
 * The added interpreter should be:.
 * If you are only using this for fc, you can add AddOn workbench folders as well, or do that in a pydev-project later on.


 * Find path to in your liclipse installation.
 * Something along the lines of:.
 * Create a regular pydev-project in liclipse.
 * Import external sources, for example a macro that you want to debug, or an external workbench.
 * In that macro (or workbench .py file) add the code lines:




 * This is where the execution will halt when the macro is run.


 * Start the liclipse debug server (menu pydev).


 * Start FreeCAD.


 * Run the macro (or any other file with a trigger) from within freecad, as you would normally do.


 * Happy debugging.


 * The use of LiClipse for remote debugging, and the steps described here related to liclipse, should work on any platform. The parts related to AppImage is for linux only.

Debugging OpenCasCade
For developers needing to dig deeper in to the OpenCasCade kernel, user @abdullah has created a thread orientation discussing how to do so.