Avant de passer à la douloureuse phase de débogage, utilisez l'Atelier test pour vérifier si les tests standards fonctionnent correctement. Si ce n'est pas le cas, c'est peut-être dû a une installation défectueuse.
Le débogage de FreeCAD est supporté par quelques mécanismes internes. La version en ligne de commande de FreeCAD fournit des options d'aide au débogage :
Ce sont les options actuellement reconnues par FreeCAD 0.19 :
Options génériques :
-v [ --version ] Affiche la version sous la forme d'une chaîne -h [ --help ] Affiche un message d'aide -c [ --console ] Démarre en mode console --response-file arg Peut également être spécifié avec '@name' --dump-config Charge la configuration --get-config arg Affiche la valeur de la clé de configuration demandée
Configuration :
-l [ --write-log ] Ecrit un fichier log dans : $HOME/.local/share/FreeCAD/FreeCAD.log (Linux) $HOME/Library/Application\ Support/FreeCAD/FreeCAD.log (macOS) %APPDATA%\FreeCAD\FreeCAD.log (Windows) --log-file arg Contrairement à --write-log cela permet de se connecter à un fichier arbitraire -u [ --user-cfg ] arg Fichier de configuration utilisateur pour charger/enregistrer les paramètres utilisateur -s [ --system-cfg ] arg Fichier de configuration pour charger/enregistrer les paramètres du système -t [ --run-test ] arg Cas de test - ou 0 pour tous -M [ --module-path ] arg Chemins de modules supplémentaires -P [ --python-path ] arg Autres chemins Python --single-instance Autoriser à exécuter une seule instance de l'application
Si vous exécutez une version de FreeCAD à partir de l'extrémité saillante de la courbe de développement, il se peut qu'il se "bloque". Vous pouvez aider à résoudre ces problèmes en fournissant aux développeurs une "backtrace". Pour ce faire, vous devez exécuter une "version de débogage" du logiciel. "Debug build" est un paramètre qui est défini au moment de la compilation, donc vous devrez soit compiler vous-même FreeCAD, soit obtenir une version "debug" précompilée.
Linux Debugging →
Prérequis :
Étapes : Entrez ce qui suit dans votre fenêtre de terminal :
Trouvez le binaire FreeCAD sur votre système :
$ whereis freecad
freecad: /usr/local/freecad <--- for example
$ cd /usr/local/freecad/bin
$ gdb FreeCAD
GNUdebugger affichera des informations d’initialisation. Le (gdb) montre que GNUDebugger est en cours d’exécution dans le terminal, entrez maintenant :
(gdb) handle SIG33 noprint nostop
(gdb) run
FreeCAD va maintenant démarrer. Effectuez les étapes qui provoquent le crash ou le blocage de FreeCAD, puis entrez dans la fenêtre du terminal :
(gdb) bt
Cela va générer une longue liste de ce que le programme faisait quand il s'est planté ou gelé. Incluez ceci avec votre rapport de problème.
(gdb) bt full
Affiche également les valeurs des variables locales. Ceci peut être combiné avec un nombre pour limiter le nombre d'images affichées.
macOS Debugging →
Prerequis :
Étapes: Entrez ce qui suit dans la fenêtre de votre terminal :
$ cd FreeCAD/bin
$ lldb FreeCAD
LLDB générera des informations d’initialisation. Le (lldb) montre que le débogueur s'exécute dans le terminal, entrez maintenant :
(lldb) run
FreeCAD va maintenant démarrer. Effectuez les étapes qui provoquent le crash ou le blocage de FreeCAD, puis entrez dans la fenêtre du terminal :
(lldb) bt
Cela va générer une longue liste de ce que le programme faisait quand il s'est bloqué ou arrêté. Incluez ceci avec votre rapport de problème.
(Applicable à Linux et macOS)
Parfois, il est utile de comprendre quelles bibliothèques FreeCAD charge, en particulier s'il y a plusieurs bibliothèques en cours de chargement du même nom mais de versions différentes (collision de versions). Afin de voir quelles bibliothèques sont chargées par FreeCAD lorsqu'il se bloque, vous devez ouvrir un terminal et l'exécuter dans le débogueur. Dans une deuxième fenêtre de terminal, découvrez l'ID du processus de FreeCAD :
ps -A | grep FreeCAD
Utilisez l'ID retourné et transmettez-le à lsof
:
lsof -p process_id
Cela affiche une longue liste de ressources chargées. Ainsi, par exemple, si vous essayez de vérifier si plusieurs versions de la bibliothèque Coin3d sont chargées, faites défiler la liste ou recherchez directement Coin dans la sortie :
lsof -p process_id | grep Coin
Pour une approche plus moderne du débogage de Python, consultez les articles suivants :
winpdb Debugging →
Voici un exemple d'usage de Winpdb dans FreeCAD :
Nous avons besoin du débogueur Python : Winpdb. Si vous ne l'avez pas installé, vous pouvez le faire sous Ubuntu/Debian avec :
sudo apt-get install winpdb
Vous pouvez maintenant configurer le débogueur.
Nous allons maintenant exécuter étape par étape un script de test Python dans FreeCAD.
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)
VS Code Debugging →
Prerequis :
# In a cmd window that has a path to you local Python 3:
pip install ptvsd
# Then if your Python is installed in C:\Users\<userid>\AppData\Local\Programs\Python\Python37
# and your FreeCAD is installed in C:\freecad\bin
xcopy "C:\Users\<userid>\AppData\Local\Programs\Python\Python37\Lib\site-packages\ptvsd" "C:\freecad\bin\Lib\site-packages\ptvsd"
Documentation du code Visual Studio pour debugging à distance
Étapes :
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()
"configurations": [ { "name": "Python: Attacher", "type": "python", "request": "attach", "port": 5678, "host": "localhost", "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "." } ] },
from sys import path
sys.path.append('/path/to/site-packages')
Où le chemin est celui du répertoire où ptvsd a été installé.
Dans le paquetage Mac c'est /Applications/FreeCAD.App/Contents/Resources/bin/python.
Vous pouvez le trouver sur votre système en tapant
import sys
print(sys.executable)
dans la console Python de FreeCAD.
LiClipse Debugging →
> ./your location/FreeCAD_xxx.AppImage --appimage-extract
> cd squashfs-root/
squashfs-root> ./usr/bin/freecadcmd
votre localité/squashfs-root/usr/bin/python
.pydevd.py
dans votre installation de liclipse.
votre emplacement/liclipse/plugins/org.python.pydev.xx/pysrc
.import sys; sys.path.append("path ending with /pysrc")
import pydevd; pydevd.settrace()
squashfs-root> ./usr/bin/freecad
pydevd.settrace()
) à partir de freecad, comme vous le feriez normalement.Voir l'article principal sur Pyzo (en).
Pour les développeurs qui ont besoin d'approfondir le noyau d'OpenCasCade, l'utilisateur @abdullah a créé un fil de discussion qui explique comment le faire.