Debugging - Individuare gli errori
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.15:
Opzioni generiche:
-v [ --version ] Stampa una stringa della versione -h [ --help ] Stampa un messaggio di aiuto -c [ --console ] Avvia in modalità console --response-file arg Può anche essere specificato con '@name'
Configurazione:
-l [ --write-log ] Scrive un file di log file in: $HOME/.FreeCAD/FreeCAD.log --log-file arg A differenza di --write-log permette di scrivere il file di log in un file arbitrario -u [ --user-cfg ] arg File per caricare/salvare le impostazioni dell'utente -s [ --system-cfg ] arg File per caricare/salvare le impostazioni di sistema -t [ --run-test ] arg Livello di Test -M [ --module-path ] arg Percorsi di moduli aggiuntivi -P [ --python-path ] arg Percorsi aggiuntivi di python
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 da sorgenti)
- un modello di FreeCAD che causa un crash
Passaggi:
Immettere quanto segue nella finestra del terminale:
$ cd FreeCAD/bin
$ gdb FreeCAD
LLDB produrrà alcune informazioni di inizializzazione. Il (lldb) mostra che il debugger è in esecuzione nel terminale, ora inserisci::
(gdb) handle SIG33 noprint nostop
(gdb) run
Ora FreeCAD viene avviato. Effettuare le operazioni che causano il crash o il blocco di FreeCAD, quindi immettere 'bt' nella finestra del terminale.
(gdb) bt
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.
(gdb) bt full
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:
$ cd FreeCAD/bin
$ lldb FreeCAD
LLDB produrrà alcune informazioni di inizializzazione. Il (lldb) mostra che il debugger è in esecuzione nel terminale, ora inserisci:
(lldb) run
Ora FreeCAD viene avviato. Effettuare le operazioni che causano il crash o il blocco di FreeCAD, quindi immettere 'bt' nella finestra del terminale.
(lldb) bt
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.
Eliminare errori Python
Per un approccio più moderno al debug di Python, almeno su Windows, vedere questo
winpdb
winpdb Debugging →
Here is an example of using Winpdb inside FreeCAD:
We need the python debugger: Winpdb. If you do not have it installed, on Ubuntu/Debian install it with:
sudo apt-get install winpdb
Now lets setup the debugger.
- Start Winpdb.
- Set the debugger password to "test": Go to menu File → Password" and set the password.
Now we will run a test python script in FreeCAD step by step.
- Eseguire winpdb e impostare la password (ad esempio test)
- Creare un file Python con questo contenuto
import rpdb2
rpdb2.start_embedded_debugger("test")
import FreeCAD
import Part
import Draft
print "hello"
print "hello"
import Draft
points=[FreeCAD.Vector(-3.0,-1.0,0.0),FreeCAD.Vector(-2.0,0.0,0.0)]
Draft.makeWire(points,closed=False,face=False,support=None)
- Avviare FreeCAD e caricare il file precedente in FreeCAD.
- Premere F6 per eseguirlo.
- Ora FreeCAD non risponde perché il debugger Python è in attesa
- Passare alla GUI di Windpdb e cliccare su "Attach". Dopo pochi secondi appare una voce "<Input>" su cui si deve fare doppio clic.
- Ora in Winpdb viene visualizzato lo script attualmente in esecuzione.
- Impostare un break nell'ultima riga e premere F5.
- Ora premere F7 per entrare nel codice Python di Draft.makeWire
Visual Studio Code (VS Code)
VS Code Debugging →
Prerequisites:
- ptvsd package need to be installed
pip install ptvsd
Visual Studio Code documentation for remote debugging
Steps:
- Add following code at the beginning of your script
import ptvsd
print("Waiting for debugger attach")
# 5678 is the default attach port in the VS Code debug configurations
ptvsd.enable_attach(address=('localhost', 5678), redirect_output=True)
ptvsd.wait_for_attach()
- Add a debug configuration in Visual Studio Code Debug → Add Configurations…. It should looks like this :
"configurations": [ { "name": "Python: Attacher", "type": "python", "request": "attach", "port": 5678, "host": "localhost", "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "." } ] },
- In VS Code add a breakpoint anywhere you want.
- Launch the script in FreeCAD. FreeCAD freeze waiting for attachment.
- In VS Code start debugging used created configuration. You should see variables in debugger area.
- Getting started
- Installation: Download, Windows, Linux, Mac, Additional components, Docker, AppImage, Ubuntu Snap
- Basics: About FreeCAD, Interface, Mouse navigation, Selection methods, Object name, Preferences, Workbenches, Document structure, Properties, Help FreeCAD, Donate
- Help: Tutorials, Video tutorials
- Workbenches: Std Base, Assembly, BIM, CAM, Draft, FEM, Inspection, Material, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Surface, TechDraw, Test Framework
- Hubs: User hub, Power users hub, Developer hub