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
GNUdebugger will output some initializing information. The (gdb) shows GNUDebugger is running in the terminal, now input:
(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.
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 dare:
(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 post nel Forum.
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 installedpypi page
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, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Surface, TechDraw, Test Framework
- Hubs: User hub, Power users hub, Developer hub