Debugging/de: Difference between revisions

From FreeCAD Documentation
(Created page with "Dies führt zu einer langen Auflistung dessen, was das Programm beim Absturz oder Einfrieren genau getan hat. Füge dies deinem Problembericht bei.")
(Created page with "Drucke auch die Werte der lokalen Variablen. Dies kann mit einer Zahl kombiniert werden, um die Anzahl der angezeigten Rahmen zu begrenzen.")
Line 73: Line 73:
}}
}}


Drucke auch die Werte der lokalen Variablen. Dies kann mit einer Zahl kombiniert werden, um die Anzahl der angezeigten Rahmen zu begrenzen.
Print the values of the local variables also. This can be combined with a number to limit the number of frames shown.


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

Revision as of 20:40, 9 December 2019

Erster Test

Bevor du den Aufwand der Fehlerbeseitigung durchläufst, benutze das Test Framework, um zu überprüfen, ob die Standardtests ordnungsgemäß funktionieren. Wenn sie nicht vollständig ausgeführt werden, liegt möglicherweise eine defekte Installation vor.

Befehlszeile

Die Fehlerbeseitigung von FreeCAD wird durch einige interne Mechanismen unterstützt. Die Kommandozeilenversion von FreeCAD bietet einige Optionen für die Fehlerbeseitigungsunterstützung.

Dies sind die derzeit anerkannten Optionen in FreeCAD 0.15:

Grundlegende Optionen:

 -v [ --version ] Druckt Versionszeichenkette
 -h [ --help ] Druckt Hilfsmeldung aus.
 -c [ --console ] Startet im Konsolenmodus
 --response-file arg Kann auch mit'@name' angegeben werden.

Konfiguration:

 -l [ --write-log ]       Schreibt eine Log-Datei nach:
                          $HOME/.FreeCAD/FreeCAD.log
 --log-file arg           Anders als bei --write-log wird hier in eine Datei mit beliebigem Namen geschrieben
 -u [ --user-cfg ] arg    Benutzerkonfigurationsdatei, um Benutzereinstellungen zu laden/speichern
 -s [ --system-cfg ] arg  Systemkonfigurationsdatei, um Systemeinstellungen zu laden/speichern
 -t [ --run-test ] arg    Test-Level
 -M [ --module-path ] arg Zusätzliche Modulpfade
 -P [ --python-path ] arg Zusätzliche Python-Pfade

Erzeugen einer Rückverfolgung

Wenn Du eine FreeCAD-Version der Anfangsphase der Entwicklungskurve verwendest, kann sie "abstürzen". Du kannst dabei helfen, diese Probleme zu lösen, indem Du einen "Backtrace" an die Entwickler schickst. Um dies zu tun, musst Du ein "Debug build" der Software haben. "Debug build" ist ein Parameter, der zur Compile-Zeit gesetzt wird, also musst Du entweder FreeCAD selbst kompilieren oder Dir eine vorkompilierte "debug"-Version besorgen.

Für Linux

Linux Fehlerbehebung →

Voraussetzungen:

  • Softwarepaket gdb installiert
  • ein Fehlerbehebungs Build von FreeCAD (zur Zeit nur verfügbar unter building from source)
  • ein FreeCAD-Modell, das einen Absturz verursacht

Schritte: Gib in deinem Terminalfenster Folgendes ein:

$ cd FreeCAD/bin
$ gdb FreeCAD

GNUdebugger gibt einige Initialisierungsinformationen aus. Die (gdb) zeigt, dass der GNUDebugger im Terminal läuft, das nun eingegeben wird:

(gdb) handle SIG33 noprint nostop
(gdb) run

FreeCAD wird nun gestartet. Führe die Schritte aus, die dazu führen, dass FreeCAD abstürzt oder einfriert, und gib dann in das Terminalfenster ein:

(gdb) bt

Dies führt zu einer langen Auflistung dessen, was das Programm beim Absturz oder Einfrieren genau getan hat. Füge dies deinem Problembericht bei.

(gdb) bt full

Drucke auch die Werte der lokalen Variablen. Dies kann mit einer Zahl kombiniert werden, um die Anzahl der angezeigten Rahmen zu begrenzen.

Für MacOSX

MacOSX Debugging ---->

Vorbedingungen:

MacOSX Debugging →

Prerequisites:

  • installiertes Softwarepake lldb
  • Debug build von FreeCAD
  • ein FreeCAD Modell, dass den Absturz verursacht

Schritte: Gib das Folgende in Dein Terminal-Fenster ein:

$ cd FreeCAD/bin
$ lldb FreeCAD

LLDB will output some initializing information. The (lldb) shows the debugger is running in the terminal, now input:

(lldb) run

FreeCAD startet nun. Führ' die Schritte aus, die zum Absturz oder zum Einfrieren von FreeCAD führen, dann gib im Terminal-Fenster ein:

(lldb) bt

Dies erzeugt ein längeres Listing dessen, was das Programm tat, bevor es abstürzte oder einfror. Füg' dies Deiner Problemmeldung bei.

(lldb) bt

This will generate a lengthy listing of exactly what the program was doing when it crashed or froze. Include this with your problem report.

Für einen moderneren Ansatz zur Fehlersuche bei Python siehe diese Beiträge:

winpdb

winpdb Fehlersuche →

Hier ist ein Beispiel für die Verwendung von Winpdb in FreeCAD:

Wir benötigen den Python-Debugger Winpdb. Wenn er nicht installiert ist, lässt sich das auf Ubuntu/Debian wie folgt tun:

sudo apt-get install winpdb

Jetzt werden wir den Debugger einrichten.

  1. Starte Winpdb.
  2. Setze das Debugger-Passwort auf "test": Gehe zum Menü DateiPasswort (FilePassword) und setze das Passwort.

Jetzt werden wir ein Python Test-Skript in FreeCAD Schritt-für-Schritt ablaufen lassen.

  1. Starten Sie winpdb und setzen Sie ein Passwort (z.B. Test)
  2. Erzeugen Sie eine Pythondatei mit folgendem Inhalt:
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. Starte FreeCAD und lade die obige Datei in FreeCAD
  2. Drücke F6 zur Ausführung
  3. Jetzt wird FreeCAD unansprechbar, weil der Python-Debugger wartet
  4. Wechsle zur Winpdb-GUI und klicke auf "Attach". Nach ein paar Sekunden erscheint ein Element "<Item>", das Du doppelklicken musst
  5. Jetzt erscheint das gerade ausgeführte Skript in Winpdb
  6. Setze einen Breakpoint in die letzte Zeile und drücke F5
  7. Nun drücke F7 zur Einzelschrittausführung im Python-Code von Draft.makeWire

Visual Studio Code (VS Code)

VS Code Debugging →

Prerequisites:

  • Das ptvsd-Paket muss installiert werden
pip install ptvsd

pypi-Webseite, ptvsd-Paket (engl.)

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.