Code Debugging
Code Debugging
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)
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)
Re: Code Debugging
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/Ich habe im Wiki irgendwo gelesen, dass es geplant ist in der Python-Programmierumgebung einen Debugger zu integrieren
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.
Für mehr Infos siehe: https://forum.freecadweb.org/viewtopic. ... 3&p=320471Oder 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.
Re: Code Debugging
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
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
Re: Code Debugging
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.
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.
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()
VG m.
Re: Code Debugging
Mit WinPdb ging das ganz ähnlich.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.
Kann man damit auch in C++ eingebetteten Python-Code debuggen?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.
Grundsätzlich nicht oder nur für FreeCAD-Module nicht?Einzig das automatische Vorschlagen von Eigenschaften und Methoden funktioniert in VS Code nicht ... damit habe ich mich nicht weiter beschäftigt
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.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.
Re: Code Debugging
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.
??
[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.
??
Re: Code Debugging
Das habe ich nicht ausprobiert. Mir fällt aber in erster Näherung kein Grund ein, warum das nicht genauso funktionieren sollte.Kann man damit auch in C++ eingebetteten Python-Code debuggen?
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.Grundsätzlich nicht oder nur für FreeCAD-Module nicht?
Edit: Im Grundsatz muss das funktionieren: https://code.visualstudio.com/docs/lang ... tellisense
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).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.
Ich ergänze im obigen Post morgen noch einmal meine zugehörige Settings-Datei aus VS-Code ... das hatte ich übersehen.
VG m.
Re: Code Debugging
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.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.
Die Frage ist dann, ob die IDE Möglichkeiten bietet, spezielle Dateien anzulegen, die die verfügbare API beinhaltet.
Was passiert denn, wenn Du den obigen Code in der FreeCAD-Python-Konsole ausführst?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).
Re: Code Debugging
Das funktioniert auf der Ebene von Python recht gut - auch mit den Modulen. In diesem Fall die A2plus Workbench:
Nochmal zum Setup:
Diese Datei als 'debug.py' benennen und als erste Zeile in die zu debuggenden Module importieren.
In der 'settings.json' muss der Pfad zu den Modulen jeweils explizit wie oben angegeben werden.
Das ist die 'launch.json' für den Debugger wie sie in meinem Setup funktioniert.
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.
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.
Re: Code Debugging
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.
@wmayer: Deine Fragen prüfe ich später noch ... Antwort folgt. VG m.