Code Debugging

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

WICHTIG: Bitte zuerst lesen, bevor Sie posten
User avatar
Markymark
Posts: 160
Joined: Sun Nov 03, 2019 4:54 pm

Re: Code Debugging

Postby Markymark » Sun Mar 01, 2020 9:34 am

Mit git commit 5947a5bad kann man jetzt FreeCAD mit einem ext. Debugger verbinden. Mit diesem Weg ist der Workflow mit winpdb sogar etwas einfacher geworden, weil man jetzt nicht mehr Detach/Attach machen muss.

Ich habe die Anbindung absichtlich in Python geschrieben, so dass Du, falls nötig, damit herumprobieren kannst.
Ich habe jetzt kurzerhand den aktuellen Build heruntergeladen:

OS: Windows 8.1 (6.3)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.19758 (Git)
Build type: Release
Branch: master
Hash: c165edd52c7f06ac09f992e5b5bf1d37661a8c0f
Python version: 3.7.3
Qt version: 5.12.5
Coin version: 4.0.0a
OCC version: 7.3.0
Locale: German/Germany (de_DE)

Damit funktioniert das ohne weitere Anpassungen!

Ich habe noch eine Sache gefunden, die mich irritiert. Dazu melde ich mich später noch einmal. Damit hat man jetzt eigentlich die gesamten Möglichkeiten von VS-Code als Python-IDE zur Verfügung. Finde ich großartig! Vielen Dank, @wmayer.

Mein Geheimtip für VS-Code: https://marketplace.visualstudio.com/it ... r-comments. Braucht kein Mensch wirklich, finde ich aber unglaublich praktisch.

VG m.
User avatar
apeltauer
Posts: 291
Joined: Fri Aug 11, 2017 2:19 pm

Re: Code Debugging

Postby apeltauer » Sun Mar 01, 2020 11:46 am

Markymark wrote:
Sun Mar 01, 2020 9:11 am
.....Wenn das soweit läuft würde ich das für VS-Code noch einmal sauber zusammenfassend aufschreiben.
:+1:
User avatar
Markymark
Posts: 160
Joined: Sun Nov 03, 2019 4:54 pm

Re: Code Debugging

Postby Markymark » Sun Mar 01, 2020 3:26 pm

Ich habe gerade zu meinem Erstaunen noch einmal nachvollzogen, dass das Intellisense ausgerechnet bei den Modulen FreeCAD und FreeCADGui selbst nicht funktioniert:

FreeCAD.png
FreeCAD.png (6.38 KiB) Viewed 213 times

Das 'bin'-Verzeichnis habe ich explizit in der 'settings.json' angegeben:

Code: Select all

{

    ...
    
    "python.autoComplete.extraPaths": [
        "C:\\Users\\ADMIN\\AppData\\Roaming\\FreeCAD\\Mod\\A2plus",
        "C:\\Program Files\\FreeCAD 0.19.19635\\lib",
        "C:\\Program Files\\FreeCAD 0.19.19635\\bin"
    ]
}

Gibt es einen Unterschied zwischen den Modulen 'MeshPart.pyd' und 'FreeCAD.pyd' was die Zugänglichkeit für Intellisense angeht?

VG m.
wmayer
Site Admin
Posts: 15756
Joined: Thu Feb 19, 2009 10:32 am

Re: Code Debugging

Postby wmayer » Sun Mar 01, 2020 4:30 pm

Markymark wrote:
Sun Mar 01, 2020 3:26 pm
Gibt es einen Unterschied zwischen den Modulen 'MeshPart.pyd' und 'FreeCAD.pyd' was die Zugänglichkeit für Intellisense angeht?
Ja, gibt es. FreeCAD.pyd und FreeCADGui.pyd sind spezielle Python-Module, die nur für den Einsatz gedacht sind, wenn man FreeCAD in der Python-Shell oder über Python in andere Applikationen einbettet. Die FreeCAD.pyd erstellt ein Modul ohne eigene Funktionen, das dann aber bei der Initialisierung von der Klasse App::Application befüllt wird. Ähnlich verhält sich das bei FreeCADGui.pyd, wobei diese ein paar eigene Funktionen bereitstellt.

Wenn man FreeCAD.exe startet, werden FreeCAD.pyd und FreeCADGui.pyd nämlich gar nicht benötigt, sondern es werden zur Laufzeit über die Python-API die builtin-Module FreeCAD und FreeCADGui erstellt. Man kann das daran erkennen, dass die beiden Module kein __file__-Atrribut besitzen.

Wenn man stattdessen python.exe oder FreeCADCmd.exe startet und FreeCAD bzw. FreeCADGui importiert, dann haben die Module das __file__-Attribut.

Gut möglich, dass VS Code Probleme mit diesem Mechanismus hat. Allerdings frage ich mich dann, wie es an die Funktionen von MeshPart.pyd herankommt. Es wird das Modul doch wohl laden und dann per dir() an die Informationen kommen.
usbhub
Posts: 280
Joined: Tue Apr 02, 2019 8:22 pm
Location: Earth

Re: Code Debugging

Postby usbhub » Sun Mar 01, 2020 4:34 pm

Super, MarkyMark und Werner! Ich benutze selber VSC, um FreeCAD Makros zu schreiben (ich versuche mich gerade an meiner ersten Workbench) und bin immer wieder von der fehlenden (einfachen) Debug-Möglichkeit gestolpert (aber man kann sich auch an print-Debugging gewöhnen ;-) ).

Habe ich es jetzt richtig verstanden, dass du eine Lösung gefunden hast, mit der man, ohne irgendwo noch jedesmal Code eingeben zu müssen, debuggen kann?

usbhub
wmayer
Site Admin
Posts: 15756
Joined: Thu Feb 19, 2009 10:32 am

Re: Code Debugging

Postby wmayer » Sun Mar 01, 2020 4:54 pm

usbhub wrote:
Sun Mar 01, 2020 4:34 pm
Habe ich es jetzt richtig verstanden, dass du eine Lösung gefunden hast, mit der man, ohne irgendwo noch jedesmal Code eingeben zu müssen, debuggen kann?
So ist es. Im Makro-Menü gibt es jetzt den Befehl, sich mit einem ext. Debugger zu verbinden (unterstützt werden derzeit winpdb und VS Code). Wenn die Verbindung klappt, friert FreeCAD ein und ist somit bereits debug-bar. Wenn man zu winpdb wechselt, dann hängt FreeCAD in dem RemoteDebugger.py-Skript und mit F5 geht es weiter und die GUI reagiert wieder.

In winpdb kann man das Skript laden, das man debuggen möchte und einen Haltepunkt setzen. Wenn man in FreeCAD das Skript zur Azsführung bringt, dann friert es wieder ein und man kann in winpdb debuggen.

Der Mechanismus funktioniert allerdings nur für physikalisch vorhandene Dateien (zumindest bei winpdb). In C++ eingebetteter Python-Code kann so nicht debuggt werden.
usbhub
Posts: 280
Joined: Tue Apr 02, 2019 8:22 pm
Location: Earth

Re: Code Debugging

Postby usbhub » Sun Mar 01, 2020 5:05 pm

wmayer wrote:
Sun Mar 01, 2020 4:54 pm
usbhub wrote:
Sun Mar 01, 2020 4:34 pm
Habe ich es jetzt richtig verstanden, dass du eine Lösung gefunden hast, mit der man, ohne irgendwo noch jedesmal Code eingeben zu müssen, debuggen kann?
So ist es.
SUPER! Gibt es einen festgelegten Zyklus, wann der nächste Daily-Build für Linux rauskommt? Dein Commit ist leider zu neu :)
User avatar
Markymark
Posts: 160
Joined: Sun Nov 03, 2019 4:54 pm

Re: Code Debugging

Postby Markymark » Sun Mar 01, 2020 5:52 pm

OK, danke für die Erläuterungen. Ich habe das im Grundsatz verstanden, obwohl ich mich hier im Gebiet des gefährlichen Halbwissens bewege. Aber das Problem ist klar geworden.

Gut möglich, dass VS Code Probleme mit diesem Mechanismus hat. Allerdings frage ich mich dann, wie es an die Funktionen von MeshPart.pyd herankommt. Es wird das Modul doch wohl laden und dann per dir() an die Informationen kommen.
Ich kann mir auch vorstellen, dass das so pragmatisch funktioniert. Dann wäre die Lösung aber doch dadurch gegeben, dass man in FreeCAD.pyd und FreeCADGui.pyd ebenfalls die enstprechenden Informationen für dir() vorhält? Das ist jetzt ganz dünnes Eis für mich.

Es gibt eine ganze Reihe an Parametern, die in der 'settings.json' für das Autocomplete/Intellisense mitgegeben werden können. Würde mich wundern, wenn es dort keine Lösung geben würde. Abhängig von deiner Antwort würde ich mich da mal tiefer einlesen. Wäre doch blöd, wenn das so kurz vor dem Ziel an dieser Sonderlocke scheitern würde.

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

Re: Code Debugging

Postby Markymark » Sun Mar 01, 2020 7:09 pm

Man kann sich jedenfalls nicht beklagen, das wäre für VS-Code nicht hinreichend dokumentiert. Kernelement ist ein für die jeweilige Sprache verfügbarer 'Language-Server'. Die grundlegende Funktionsweise ist erklärt und im Anschluss wird als Beispiel ein Server für eine simple Textdatei erstellt. Ich werde die Tage mal weiterlesen:

https://code.visualstudio.com/api/langu ... sion-guide

Die Weiterentwicklung von Intellisense ist wohl IntelliCode:

https://marketplace.visualstudio.com/it ... ntellicode

Da erfolgt dann die Code-Completion via Künstlicher Intelligenz und Machine Learning. Man schreibt dann nur die ersten 5 Code-Zeilen ... und IntelliCode programmiert das fertig ... :lol:

VG m.
MrRossi
Posts: 85
Joined: Thu Dec 01, 2016 7:30 am

Re: Code Debugging

Postby MrRossi » Fri Mar 06, 2020 7:56 am

Ich frage mich nur, wie dieser Kollege das geschafft hat?
Ist das auf einem Linux-System veilleicht anders?

https://pythoncvc.net/?lang=en

Grüße
Christian