Code Debugging

In diesem Forum Fragen und Diskussionen in Deutsch
Forum rules
Foren-Regeln und hilfreiche Informationen

WICHTIG: Bitte zuerst lesen, bevor Sie posten
MrRossi
Posts: 107
Joined: Thu Dec 01, 2016 7:30 am

Code Debugging

Post by MrRossi »

Hallo zusammen

Ich habe im Wiki irgendwo gelesen, dass es geplant ist in der Python-Programmierumgebung einen Debugger zu integrieren, mit
dem all die schönen Sachen machen kann, die beim Programmieren hilfreich sind, wie Stoppunkte setzen, Variableninspektion, usw.

Alles was ich dann dazu gefunden habe ist eine Kommunikation im Forum von 2017 irgendwann glaube ich, sonst nichts mehr.

Weß jemand hier, ob an dem Feature noch gearbeitet wird?
Oder weiß jemand, ob es heute eine Lösung gibt, um FreeCaD als Ganzes in einer Debugging-Umgebung laufen zu lassen,
so wie bei VS Community z.B.

Danke für die Antworten.

Grüße
Christian

OS: Windows 10 (10.0)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.18760 (Git)
Build type: Release
Branch: master
Hash: ef73ab5f3a330d3c44138f23290f8c9f7a334caf
Python version: 3.7.3
Qt version: 5.12.1
Coin version: 4.0.0a
OCC version: 7.3.0
Locale: German/Austria (de_AT)
wmayer
Founder
Posts: 20319
Joined: Thu Feb 19, 2009 10:32 am
Contact:

Re: Code Debugging

Post by wmayer »

Ich habe im Wiki irgendwo gelesen, dass es geplant ist in der Python-Programmierumgebung einen Debugger zu integrieren
Ich hatte mal vor Jahren damit angefangen, aber es bisher nicht weiter entwickelt. Ich konnte damals schon Haltepunkte setzen und durch den Code debuggen. Der verwaiste Code findet sich hier: https://sourceforge.net/p/free-cad/code ... er/~/tree/

Es gehört aber immer noch zu meinen Langzeitzielen, einen Debugger zu interieren.

In der Zwischenzeit hat die Community eine sehr viel weiter fortgeschrittene Implementierung bereitgestellt: https://forum.freecadweb.org/viewtopic.php?f=10&t=21898
Rein von den Screenshots sieht das schon sehr gut aus und es wäre wert, sich das mal genauer anzusehen.
Oder weiß jemand, ob es heute eine Lösung gibt, um FreeCaD als Ganzes in einer Debugging-Umgebung laufen zu lassen,
so wie bei VS Community z.B.
Für mehr Infos siehe: https://forum.freecadweb.org/viewtopic. ... 3&p=320471
MrRossi
Posts: 107
Joined: Thu Dec 01, 2016 7:30 am

Re: Code Debugging

Post by MrRossi »

Hallo wmayer

Danke für die Antwort.
Ich hatte da schon einiges gefunden, noch nicht alles.
Ich werde mich da mal durchwurscteln, wird zwar nicht leicht werden für einen "Amateur" wie mich.
Schauen wir mal.

Christian
User avatar
Markymark
Posts: 228
Joined: Sun Nov 03, 2019 4:54 pm

Re: Code Debugging

Post by Markymark »

Hallo zusammen,

einen Debugger zu integrieren wäre sicherlich eine gute Sache. Ich frage mich aber, ob man hier das Rad nicht neu erfindet. Zumindest für meinen Workflow habe ich eine optimale Integration mit VS Code hinbekommen.

Code: Select all

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()
In der FreeCAD Python-Umgebung via pip ptvsd installieren. Obiges Script nenne ich debug.py und importiere es in der ersten Zeile des zu debuggenden Codes. Änderungen in VS Code werden umgehend im FreeCAD Editor automatisch aktualisiert und umgekehrt. Einzig das automatische Vorschlagen von Eigenschaften und Methoden funktioniert in VS Code nicht ... damit habe ich mich nicht weiter beschäftigt. Wenn ich das benötige, wechsele ich kurz in den integrierten Editor. Sicherlich könnte man das aber auch noch heilen. Vielleicht macht es mehr Sinn, eine noch bessere Integration von VS Code zu verfolgen (oder einer vergleichbaren IDE) und sich auf den Kern von FreeCAD zu konzentrieren. Nur so als Idee ... vielleicht übersehe ich auch was.

VG m.
wmayer
Founder
Posts: 20319
Joined: Thu Feb 19, 2009 10:32 am
Contact:

Re: Code Debugging

Post by wmayer »

einen Debugger zu integrieren wäre sicherlich eine gute Sache. Ich frage mich aber, ob man hier das Rad nicht neu erfindet. Zumindest für meinen Workflow habe ich eine optimale Integration mit VS Code hinbekommen.
Mit WinPdb ging das ganz ähnlich.
In der FreeCAD Python-Umgebung via pip ptvsd installieren. Obiges Script nenne ich debug.py und importiere es in der ersten Zeile des zu debuggenden Codes.
Kann man damit auch in C++ eingebetteten Python-Code debuggen?
Einzig das automatische Vorschlagen von Eigenschaften und Methoden funktioniert in VS Code nicht ... damit habe ich mich nicht weiter beschäftigt
Grundsätzlich nicht oder nur für FreeCAD-Module nicht?
Vielleicht macht es mehr Sinn, eine noch bessere Integration von VS Code zu verfolgen (oder einer vergleichbaren IDE) und sich auf den Kern von FreeCAD zu konzentrieren. Nur so als Idee ... vielleicht übersehe ich auch was.
Es ist halt immer noch eine Krücke, wenn man den Code erst ändern muss, dass man ihn debuggen kann. Aber vielleicht gibt es noch andere Wege, Verbindung mit einem ext. Debugger aufzunehmen, ohne den Code ändern zu müssen.
MrRossi
Posts: 107
Joined: Thu Dec 01, 2016 7:30 am

Re: Code Debugging

Post by MrRossi »

Was ich gefunden habe ist dieser thread:
[https://forum.freecadweb.org/viewtopic.php?f=10&t=35383]

Weiß aber nicht, wie ich den Code sozusagen in PyCharm rein bringe. Mit fehlt da noch irgendwie der Zusamennhang.
??
User avatar
Markymark
Posts: 228
Joined: Sun Nov 03, 2019 4:54 pm

Re: Code Debugging

Post by Markymark »

Kann man damit auch in C++ eingebetteten Python-Code debuggen?
Das habe ich nicht ausprobiert. Mir fällt aber in erster Näherung kein Grund ein, warum das nicht genauso funktionieren sollte.
Grundsätzlich nicht oder nur für FreeCAD-Module nicht?
Nur für die FreeCAD-Module. Warum das so ist, verstehe ich nicht wirklich. Als Interpreter ist Python in der FreeCAD-Umgebung korrekt verlinkt. Ich bin da aber auch noch nicht eingestiegen, weil es mir bisher nicht so wichtig war. Das kann eingentlich kein großes Thema sein.

Edit: Im Grundsatz muss das funktionieren: https://code.visualstudio.com/docs/lang ... tellisense
Es ist halt immer noch eine Krücke, wenn man den Code erst ändern muss, dass man ihn debuggen kann. Aber vielleicht gibt es noch andere Wege, Verbindung mit einem ext. Debugger aufzunehmen, ohne den Code ändern zu müssen.
Ja, kosmetisch unschön. Allerdings ist es lediglich die erste Zeile im Code, die man mit einem Zeichen auskommentieren kann. Vielleicht gibt es auch eine Möglichkeit den Import bedingt auszuführen ... je nachdem, unter welchen Rahmenbedingungen das Skript gestartet wird (einfach mal ins Blaue fabuliert, ohne konkrete Idee).

Ich ergänze im obigen Post morgen noch einmal meine zugehörige Settings-Datei aus VS-Code ... das hatte ich übersehen.

VG m.
wmayer
Founder
Posts: 20319
Joined: Thu Feb 19, 2009 10:32 am
Contact:

Re: Code Debugging

Post by wmayer »

Markymark wrote: Thu Feb 27, 2020 5:01 pm Nur für die FreeCAD-Module. Warum das so ist, verstehe ich nicht wirklich. Als Interpreter ist Python in der FreeCAD-Umgebung korrekt verlinkt. Ich bin da aber auch noch nicht eingestiegen, weil es mir bisher nicht so wichtig war. Das kann eingentlich kein großes Thema sein.
Na dann ist es klar, warum es nicht funktioniert. Die meisten FreeCAD-Python-Module sind ja in C++geschrieben und daher hat die Intelli-Sense der IDE keine Möglichkeit, den (erwarteten) Python-Code zu parsen und so an die verfügbaren Funktionen zu kommen.

Die Frage ist dann, ob die IDE Möglichkeiten bietet, spezielle Dateien anzulegen, die die verfügbare API beinhaltet.
Ja, kosmetisch unschön. Allerdings ist es lediglich die erste Zeile im Code, die man mit einem Zeichen auskommentieren kann. Vielleicht gibt es auch eine Möglichkeit den Import bedingt auszuführen ... je nachdem, unter welchen Rahmenbedingungen das Skript gestartet wird (einfach mal ins Blaue fabuliert, ohne konkrete Idee).
Was passiert denn, wenn Du den obigen Code in der FreeCAD-Python-Konsole ausführst?
User avatar
Markymark
Posts: 228
Joined: Sun Nov 03, 2019 4:54 pm

Re: Code Debugging

Post by Markymark »

Das funktioniert auf der Ebene von Python recht gut - auch mit den Modulen. In diesem Fall die A2plus Workbench:

Bild 1.png
Bild 1.png (3.52 KiB) Viewed 1384 times
Bild 2.png
Bild 2.png (26.6 KiB) Viewed 1384 times

Nochmal zum Setup:

Code: Select all

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()

Diese Datei als 'debug.py' benennen und als erste Zeile in die zu debuggenden Module importieren.

Code: Select all

{
    "python.linting.pylintEnabled": true,
    "python.linting.enabled": true,
    // "python.pythonPath": "C:\\ProgramData\\Miniconda3\\python.exe",
    "python.pythonPath": "C:\\Program Files\\FreeCAD 0.19.19635\\bin\\python.exe",
    "python.autoComplete.extraPaths": ["C:\\Users\\ADMIN\\AppData\\Roaming\\FreeCAD\\Mod\\A2plus"]
}

In der 'settings.json' muss der Pfad zu den Modulen jeweils explizit wie oben angegeben werden.

Code: Select all

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Attach",
            "type": "python",
            "request": "attach",
            "port": 5678,
            "host": "localhost",
            "pathMappings": [
                {
                    // Für die Arbeit mit Workspaces:
                    // "localRoot": "${workspaceFolder}",
                    // "remoteRoot": "${workspaceFolder}"

                    // Für die Arbeit mit Verzeichnissen:
                    "localRoot": "${fileDirname}",
                    "remoteRoot": "${fileDirname}"
                    
                    // Für die Arbeit mit absoluten Pfadangaben:
                    // "localRoot": "D:\SEAFILE\Documents\01 Mark\FreeCAD\Macro\VSC_Debugging_Test",
                    // "remoteRoot": "D:\SEAFILE\Documents\01 Mark\FreeCAD\Macro\VSC_Debugging_Test"
                }
            ]
        }
    ]
}

Das ist die 'launch.json' für den Debugger wie sie in meinem Setup funktioniert.

Code: Select all

import debug

# =============================================================================

import FreeCAD # shourtcut: App
import FreeCADGui # shortcut: Gui

# Prevent IDE/Linter Error Message
Gui = FreeCADGui
App = FreeCAD

import a2p_importpart
import a2p_constraints
import a2p_solversystem

Das sind die ersten Zeilen meines zu debuggenden Skriptes. Die drei unteren Import-Zeilen werden von dem Linter noch unterkringelt. Ich habe in der 'settings.json' noch keine Möglichkeit gefunden, den Linter explizit auf die Module hinzuweisen. Ich überblicke im Moment nicht, ob das tatsächlich notwendig ist, oder ob das möglicherweise einfach ein kleiner Bug in VSC oder dem Linter ist.

VG m.
User avatar
Markymark
Posts: 228
Joined: Sun Nov 03, 2019 4:54 pm

Re: Code Debugging

Post by Markymark »

Elegant wäre es doch, wenn man neben den Button "Execute" im Makro Editor noch einen Button "Debug" vorsehen könnte, der den "wait for attach" für die externe IDE / den externen Debugger ausführt, um direkt im Anschluss an das Skript zu übergeben. Einfach so ohne Hintergrundwissen ins Blaue ...

@wmayer: Deine Fragen prüfe ich später noch ... Antwort folgt. VG m.
Post Reply