Debugging/it: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
No edit summary
 
(65 intermediate revisions by 4 users not shown)
Line 1: Line 1:
<languages/>
<languages/>


<div class="mw-translate-fuzzy">
{{Docnav/it
{{Docnav/it
|[[Module_Creation/it|Creare Moduli]]
|[[Tracker/it|Tracker]]
|[[Testing/it|Testare]]
|[[Testing/it|Testare FreeCAD]]
}}
}}
</div>


{{TOCright}}
{{TOCright}}


<span id="Test_First"></span>
== Prova preliminare==
== Prova preliminare==


Prima di provare il debug usare la [[Testing/it|La struttura di Test]] (test framework - macro) per verificare se i test standard funzionano correttamente. Se non funzionano, è possibile che l'installazione sia danneggiata.
Prima di provare il debug usare la [[Testing/it|Struttura di Test]] (test framework - macro) per verificare se i test standard funzionano correttamente. Se non funzionano, è possibile che l'installazione sia danneggiata.


<span id="Command_Line"></span>
== Riga di comando ==
== 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:
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:
<div class="mw-translate-fuzzy">
Queste sono le opzioni attualmente riconosciute in FreeCAD 0.15:
</div>


<div class="mw-translate-fuzzy">
Opzioni generiche:
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'
</div>


-v [ --version ] Stampa la stringa della versione
<div class="mw-translate-fuzzy">
-h [ --help ] Stampa un messaggio di aiuto
Configurazione:
-l [ --write-log ] Scrive un file di log file in: $HOME/.FreeCAD/FreeCAD.log
-c [ --console ] Si avvia in modalità console
--response-file arg Può essere specificato anche con '@name'
--log-file arg A differenza di --write-log permette di scrivere il file di log in un file arbitrario
--dump-config Scarica la configurazione
-u [ --user-cfg ] arg File per caricare/salvare le impostazioni dell'utente
--get-config arg Stampa il valore della chiave di configurazione richiesta
-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
</div>


Configurazione:<br>
-l [ --write-log ] Scrive un file di registro in:
$HOME/.local/share/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

<span id="Generating_a_Backtrace"></span>
== Generare un Backtrace ==
== 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.
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.


<span id="For_Linux"></span>
=== Per Linux ===
=== Per Linux ===


Line 55: Line 59:
Prerequisiti:
Prerequisiti:


<div class="mw-translate-fuzzy">
* pacchetto software gdb installato
* pacchetto software gdb installato
* un debug build di FreeCAD (in questo momento disponibili solo per la [[Compile_on_Linux#For_a_Debug_build|compilazione da sorgenti]])
* un debug build di FreeCAD (in questo momento disponibili solo per la [[Compile_on_Linux/it#Per_una_compilazione_di_Debug|compilazione di Debug]])
* un modello di FreeCAD che causa un crash
* un modello di FreeCAD che causa un crash
</div>


Passaggi:
Passaggi:
Line 65: Line 67:
Immettere quanto segue nella finestra del terminale:
Immettere quanto segue nella finestra del terminale:


Trovare il codice binario di FreeCAD sul proprio sistema:
Find FreeCAD binary on your system:


{{Code|code=
{{Code|code=
Line 82: Line 84:
}}
}}


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


{{Code|code=
{{Code|code=
Line 98: Line 100:
</div></div> <!-- END OF COLLAPSIBLE DIV -->
</div></div> <!-- END OF COLLAPSIBLE DIV -->


<span id="For_macOS"></span>
<div class="mw-translate-fuzzy">
=== Per MacOSX ===
=== Per macOSX ===
</div>


<!-- START OF COLLAPISBLE DIV --><div class="toccolours mw-collapsible mw-collapsed" style="width:800px;">
<!-- START OF COLLAPISBLE DIV --><div class="toccolours mw-collapsible mw-collapsed" style="width:800px;">


macOSX Debugging →
<div class="mw-translate-fuzzy">
MacOSX Debugging →
</div>


<div class="mw-collapsible-content">
<div class="mw-collapsible-content">
Line 141: Line 140:
</div></div> <!-- END OF COLLAPSIBLE DIV -->
</div></div> <!-- END OF COLLAPSIBLE DIV -->


<span id="List_Libraries_Loaded_by_FreeCAD"></span>
== List Libraries Loaded by FreeCAD ==
== Elencare le librerie caricate da FreeCAD ==


(Applicable to Linux and macOS)
(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:
Sometimes it's helpful to understand what libraries FreeCAD is loading, specifically if there are multiple libraries being loaded of the same name but different versions (version collision). In order to see which libraries are loaded by FreeCAD when it crashes you should open a terminal and run it in the debugger. In a second terminal window, find out the process id of FreeCAD:


{{incode|ps -A &#124; grep FreeCAD}}
{{incode|ps -A &#124; grep FreeCAD}}


Use the returned id and pass it to {{incode|lsof}}:
Usa l'id restituito e passalo a {{incode|lsof}}:


{{incode| lsof -p process_id}}
{{incode| lsof -p process_id}}


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:
This prints a long list of loaded resources. So for example, if trying to ascertain if more than one Coin3d library versions is loaded, scroll through the list or search directly for Coin in the output:


{{incode|lsof -p process_id &#124; grep Coin}}
{{incode|lsof -p process_id &#124; grep Coin}}


<span id="Python_Debugging"></span>
== Eliminare errori Python ==
== Eliminare errori Python ==


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


E' necessario il debugger di Python: "Winpdb". Se non lo è installato, su Ubuntu/Debian installarlo con:
<div class="mw-translate-fuzzy">
Abbiamo bisogno del debugger di Python: "Winpdb". Se non lo hai installato, su Ubuntu/Debian installalo con:
</div>


{{Code|code=
{{Code|code=
Line 182: Line 181:
}}
}}


Ora consente di impostare il debugger.
Questo consente di impostare il debugger.


# Start ''Winpdb''.
# Start ''Winpdb''.
# Imposta la password del debugger su "test": vai al menu "File" → "Password" e imposta la password.
# Impostare la password del debugger su "test": andare al menu "File" → "Password" e impostare la password.


Ora si esegua uno script Python di prova in FreeCAD passo dopo passo.
<div class="mw-translate-fuzzy">
Ora eseguiremo uno script Python di prova in FreeCAD passo dopo passo.
</div>


# Eseguire winpdb e impostare la password (ad esempio test)
# Eseguire winpdb e impostare la password (ad esempio test)
Line 227: Line 224:
Prerequisiti:
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.
<div class="mw-translate-fuzzy">
* ptvsd il pacchetto deve essere installato
</div>


{{Code|code=
{{Code|code=
Line 244: Line 239:


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


{{Code|code=
{{Code|code=
Line 254: Line 249:
}}
}}


* Aggiungere una configurazione di debug nel codice di Visual Studio {{MenuCommand|Debug → Aggiungi configurazioni ...}}.
<div class="mw-translate-fuzzy">
* La configurazione dovrebbe assomigliare a questa:
* Aggiungi una configurazione di debug nel codice di Visual Studio {{MenuCommand|Debug → Aggiungi configurazioni ...}}. Dovrebbe apparire così:
</div>


<!--NOT CHANGE THE <pre> </pre> BALISE CAUSE THE PIPE OR SPACE IN MACRO CODE CUT THE MACRO-->
<!--NOT CHANGE THE <pre> </pre> BALISE CAUSE THE PIPE OR SPACE IN MACRO CODE CUT THE MACRO-->
Line 276: Line 270:
</pre>
</pre>


* In VS Code aggiungere un breakpoint dove si desidera.
<div class="mw-translate-fuzzy">
* Avviare lo script in FreeCAD. FreeCAD si blocca in attesa dell'allegato.
* In VS Code aggiungi un breakpoint dove vuoi.
* In VS Code avviare il debug, utilizzando la configurazione creata. Si dovrebbero vedere le variabili nell'area del debugger.
* Avvia lo script in FreeCAD. Blocco di FreeCAD in attesa di allegato.
* Quando si impostano i punti di interruzione, VS Code segnalerà di non trovare il file .py aperto nell'editor di VS Code.
* In VS Code avviare il debug della configurazione creata utilizzata. Dovresti vedere le variabili nell'area debugger.
** Cambiare "remoteRoot": "." to "remoteRoot": "<directory del file>"
</div>
*** 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/<userid>/AppData/Roaming/FreeCAD/Macro", usare:
*** "localRoot": "C:/Users/<userid>/AppData/Roaming/FreeCAD/Macro",
*** "remoteRoot": "C:/Users/<userid>/AppData/Roaming/FreeCAD/Macro"
* Se la macro non riesce a trovare ptvsd nonostante l'abbia installata da qualche parte, far precedere 'import ptvsd' con


{{Code|code=
{{Code|code=
Line 287: Line 287:
}}
}}


Where the path is to the directory where ptvsd was installed.
Dove si trova il percorso della directory in cui è stato installato ptvsd.
* On the left bottom edge of VSCode you can choose the Python executable - it's best to make this the version packaged with FreeCAD.
* Sul bordo in basso a sinistra di VSCode si può scegliere l'eseguibile Python: è meglio impostarlo alla versione installata con FreeCAD.
In the Mac package it is /Applications/FreeCAD.App/Contents/Resources/bin/python.
Nel package Mac è /Applications/FreeCAD.App/Contents/Resources/bin/python.


E' possibile individuarlo sul proprio sistema digitando
You can locate it on your system by typing


{{Code|code=
{{Code|code=
Line 298: Line 298:
}}
}}


into FreeCAD's Python console.
nella console Python di FreeCAD.


</div></div> <!-- END OF COLLAPSIBLE DIV -->
</div></div> <!-- END OF COLLAPSIBLE DIV -->


<span id="With_LiClipse_and_AppImage"></span>
=== With LiClipse and AppImage ===
=== Con LiClipse e AppImage ===


<!-- START OF COLLAPSIBLE DIV --><div class="toccolours mw-collapsible mw-collapsed" style="width:800px;">
<!-- START OF COLLAPSIBLE DIV --><div class="toccolours mw-collapsible mw-collapsed" style="width:800px;">
Line 310: Line 311:
<div class="mw-collapsible-content">
<div class="mw-collapsible-content">


* Extract AppImage.
* Estrarre AppImage.


{{Code|code=
{{Code|code=
Line 317: Line 318:
}}
}}


* The sqashfs-root location is where the debugger later on is hooked up to.
* La posizione sqashfs-root è il punto in cui il debugger viene successivamente collegato.


* Make sure you can start a FreeCAD session from within the squashfs-root location.
* Assicurarsi di poter avviare una sessione di FreeCAD dalla posizione squashfs-root.


{{Code|code=
{{Code|code=
Line 325: Line 326:
}}
}}


* Si dovrebbe avviare una sessione della riga di comando di FreeCAD.
* Should start up a FreeCAD commandline session.


* Install [https://www.liclipse.com/ LiClipse].
* Installare [https://www.liclipse.com/LiClipse].
** Viene fornito pronto con pydev e dispone di programmi di installazione per tutte le piattaforme.
** Comes ready with pydev and has installers for all platforms.
** Per Linux è sufficiente estrarlo (in qualsiasi posizione) ed eseguire.
** For linux it is just to extract (to any location) and run.


* Configure liclipse for debugging.
* Configurare liclipse per il debug.
** Fare clic con il pulsante destro del mouse sull'icona pydev (angolo in alto a destra) e scegli Personalizza.
** 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).
*** Attivare "PyDev Debug" (tramite la casella di controllo, oppure potrebbe essere necessario andare alla scheda "Disponibilità set di azioni" e attivarla prima).
*** In the pydev menu you can now choose "start debug server".
*** Nel menu pydev scegliere "start debug server".
** Use menu window/open perspective/other > debug.
** Usare finestra menu/apri prospettiva/altro > debug.
*** Fai clic con il pulsante destro del mouse sull'icona di debug (angolo in alto a destra) e scegliere Personalizza.
*** Right-click debug icon (upper right corner) and choose customize.
*** Selezionando "Debug" vengono visualizzati gli strumenti di navigazione di debug nella barra degli strumenti.
*** Checking "Debug" brings the debugging navigation tools to the toolbar.
** Aprire le preferenze tramite la finestra del menu/preferenze.
** Open preferences through menu window/preferences.
*** In PyDev/Interpreters add "new Interpreter by browsing".
*** In PyDev/Interpreters aggiungere "nuovo interprete navigando".
*** The added interpreter should be: {{incode|your loc/squashfs-root/usr/bin/python}}.
*** L'interprete aggiunto dovrebbe essere: {{incode|your loc/squashfs-root/usr/bin/python}}.
*** 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.
*** Se si sta usando solo per fc, si possono aggiungere anche le cartelle del workbench AddOn o farlo in un progetto pydev in seguito.


* Find path to {{incode|pydevd.py}} in your liclipse installation.
* Trovare il percorso per {{incode|pydevd.py}} nella tua installazione di liclipse.
** Something along the lines of: {{incode|your location/liclipse/plugins/org.python.pydev.xx/pysrc}}.
** Qualcosa sulla falsariga di: {{incode|your location/liclipse/plugins/org.python.pydev.xx/pysrc}}.
* Create a regular pydev-project in liclipse.
* Creare un normale progetto pydev in liclipse.
** Import external sources, for example a macro that you want to debug, or an external workbench.
** Importare fonti esterne, ad esempio una macro di cui si desidera eseguire il debug o un workbench esterno.
** In that macro (or workbench .py file) add the code lines:
** In quella macro (o file .py del workbench) aggiungere le righe di codice:


: {{Code|code=
: {{Code|code=
Line 354: Line 355:
}}
}}


:* Questo è il punto in cui l'esecuzione si fermerà quando viene eseguita la macro.
:* This is where the execution will halt when the macro is run.


* Start the liclipse debug server (menu pydev).
* Avviare il server di debug liclipse (menu pydev).


* Start FreeCAD.
* Avviare FreeCAD.


{{Code|code=
{{Code|code=
Line 364: Line 365:
}}
}}


* Run the macro (or any other file with a {{incode|pydevd.settrace()}} trigger) from within freecad, as you would normally do.
* Eseguire la macro (o qualsiasi altro file con un trigger {{incode|pydevd.settrace()}}) da freecad, come si farebbe normalmente.


* Happy debugging.
* Buon debug.


* 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.
* L'uso di LiClipse per il debug remoto e i passaggi qui descritti relativi a liclipse dovrebbero funzionare su qualsiasi piattaforma. Le parti relative ad AppImage sono solo per Linux.


</div></div> <!-- END OF COLLAPSIBLE DIV -->
</div></div> <!-- END OF COLLAPSIBLE DIV -->

=== Pyzo ===

Vedere l'[[Pyzo|articolo principale su Pyzo]].


== Debugging OpenCasCade ==
== Debugging OpenCasCade ==


For developers needing to dig deeper in to the OpenCasCade kernel, user @abdullah has created a [https://forum.freecadweb.org/viewtopic.php?f=10&t=47017 thread] orientation discussing how to do so.
Per gli sviluppatori che hanno bisogno di approfondire il kernel OpenCasCade, l'utente @abdullah ha creato un [https://forum.freecadweb.org/viewtopic.php?f=10&t=47017 thread] di orientamento che spiega come farlo.




<div class="mw-translate-fuzzy">
{{Docnav/it
{{Docnav/it
|[[Module_Creation/it|Creare Moduli]]
|[[Tracker/it|Tracker]]
|[[Testing/it|Testare]]
|[[Testing/it|Testare FreeCAD]]
}}
}}
</div>


{{Powerdocnavi{{#translation:}}}}
{{Powerdocnavi{{#translation:}}}}

Latest revision as of 21:14, 2 December 2023

Prova preliminare

Prima di provare il debug usare 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/.local/share/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:

Trovare il codice binario di FreeCAD sul proprio sistema:

$ whereis freecad
freecad: /usr/local/freecad <--- for example

$ cd /usr/local/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

FreeCAD verrà 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.

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:

ps -A | grep FreeCAD

Usa l'id restituito e passalo a lsof:

lsof -p process_id

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:

lsof -p process_id | grep Coin

Eliminare errori Python

Per un approccio più moderno al debug di Python, almeno su Windows, vedere questo

winpdb

winpdb Debugging →

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

E' necessario il debugger di Python: "Winpdb". Se non lo è installato, su Ubuntu/Debian installarlo con:

sudo apt-get install winpdb

Questo consente di impostare il debugger.

  1. Start Winpdb.
  2. Impostare la password del debugger su "test": andare al menu "File" → "Password" e impostare la password.

Ora si esegua 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
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)
  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 "<Input>" 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.
# 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"

pypi page

Documentazione di Visual Studio Code per il debug remoto

Passi:

  • Aggiungere il seguente codice all'inizio dello 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()
  • Aggiungere una configurazione di debug nel codice di Visual Studio Debug → Aggiungi configurazioni ....
  • 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 aggiungere un breakpoint dove si desidera.
  • Avviare 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": "<directory del file>"
      • 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/<userid>/AppData/Roaming/FreeCAD/Macro", usare:
      • "localRoot": "C:/Users/<userid>/AppData/Roaming/FreeCAD/Macro",
      • "remoteRoot": "C:/Users/<userid>/AppData/Roaming/FreeCAD/Macro"
  • Se la macro non riesce a trovare ptvsd nonostante l'abbia installata da qualche parte, far precedere 'import ptvsd' con
from sys import path
sys.path.append('/path/to/site-packages')

Dove si trova il percorso della directory in cui è stato installato ptvsd.

  • Sul bordo in basso a sinistra di VSCode si può scegliere l'eseguibile Python: è meglio impostarlo alla versione installata con FreeCAD.

Nel package Mac è /Applications/FreeCAD.App/Contents/Resources/bin/python.

E' possibile individuarlo sul proprio sistema digitando

import sys
print(sys.executable)

nella console Python di FreeCAD.

Con LiClipse e AppImage

LiClipse Debugging →

  • Estrarre AppImage.
> ./your location/FreeCAD_xxx.AppImage --appimage-extract
> cd squashfs-root/
  • 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.
squashfs-root> ./usr/bin/freecadcmd
  • Si dovrebbe avviare una sessione della riga di comando di FreeCAD.
  • Installare [1].
    • Viene fornito pronto con pydev e dispone di programmi di installazione per tutte le piattaforme.
    • Per Linux è sufficiente estrarlo (in qualsiasi posizione) ed eseguire.
  • Configurare liclipse per il debug.
    • Fare clic con il pulsante destro del mouse sull'icona pydev (angolo in alto a destra) e scegli Personalizza.
      • Attivare "PyDev Debug" (tramite la casella di controllo, oppure potrebbe essere necessario andare alla scheda "Disponibilità set di azioni" e attivarla prima).
      • Nel menu pydev scegliere "start debug server".
    • Usare finestra menu/apri prospettiva/altro > debug.
      • Fai clic con il pulsante destro del mouse sull'icona di debug (angolo in alto a destra) e scegliere Personalizza.
      • Selezionando "Debug" vengono visualizzati gli strumenti di navigazione di debug nella barra degli strumenti.
    • Aprire le preferenze tramite la finestra del menu/preferenze.
      • In PyDev/Interpreters aggiungere "nuovo interprete navigando".
      • L'interprete aggiunto dovrebbe essere: your loc/squashfs-root/usr/bin/python.
      • Se si sta usando solo per fc, si possono aggiungere anche le cartelle del workbench AddOn o farlo in un progetto pydev in seguito.
  • Trovare il percorso per pydevd.py nella tua installazione di liclipse.
    • Qualcosa sulla falsariga di: your location/liclipse/plugins/org.python.pydev.xx/pysrc.
  • Creare un normale progetto pydev in liclipse.
    • Importare fonti esterne, ad esempio una macro di cui si desidera eseguire il debug o un workbench esterno.
    • In quella macro (o file .py del workbench) aggiungere le righe di codice:
import sys; sys.path.append("path ending with /pysrc")
import pydevd; pydevd.settrace()
  • Questo è il punto in cui l'esecuzione si fermerà quando viene eseguita la macro.
  • Avviare il server di debug liclipse (menu pydev).
  • Avviare FreeCAD.
squashfs-root> ./usr/bin/freecad
  • Eseguire la macro (o qualsiasi altro file con un trigger pydevd.settrace()) da freecad, come si farebbe normalmente.
  • Buon debug.
  • L'uso di LiClipse per il debug remoto e i passaggi qui descritti relativi a liclipse dovrebbero funzionare su qualsiasi piattaforma. Le parti relative ad AppImage sono solo per Linux.

Pyzo

Vedere l'articolo principale su Pyzo.

Debugging OpenCasCade

Per gli sviluppatori che hanno bisogno di approfondire il kernel OpenCasCade, l'utente @abdullah ha creato un thread di orientamento che spiega come farlo.