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 » Fri Mar 06, 2020 3:15 pm

MrRossi wrote:
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
Hi Christian,

letztenlich macht er es doch genauso ... er macht die Pfade bekannt. Er macht das halt im Environment und nicht in der 'settings.json' ... das scheint so auch zu funktionieren. Viele Wege führen nach Rom ... Ich denke aber, dass die Code-Completion für FreeCAD und FreeCADGui nicht funktionieren hat er damit auch nicht gelöst. Werner hat oben ja erklärt, warum das (bisher) so ist.

Ich hatte heute auch den Fall dass die Code-Completen sehr lange gedauert hat. Mehrere Sekunden ... in dieser Zeit stand lediglich "Loading ..." hinter dem Cursor. Das ist definitiv aber kein FreeCAD-Problem (denke ich) ... das scheint ein bekanntes VC-Code-Problem zu sein. Zumindest gibt es dazu zahlreiche Diskussionen.

Ich werde mich damit noch weiter beschäftigen und hatte dazu oben ja schon einige Links gepostet. Ich hatte diese Woche nur kein Gelegenheit. Mal sehen, was die kommende Woche bringt.

Schönes Wochenende allen.

VG Mark
usbhub
Posts: 280
Joined: Tue Apr 02, 2019 8:22 pm
Location: Earth

Re: Code Debugging

Postby usbhub » Sat Mar 07, 2020 6:44 pm

Markymark wrote:
Fri Mar 06, 2020 3:15 pm
ping
Moin,
gibt es die Anleitung schon? Wäre super cool :)
User avatar
Markymark
Posts: 160
Joined: Sun Nov 03, 2019 4:54 pm

Re: Code Debugging

Postby Markymark » Sun Mar 08, 2020 10:04 am

Ich habe das jetzt mal Quick & Dirty gemacht, ohne Screenshots. Vielleicht ist das im ersten Wurf schon ausreichend. Bitte einfach mal testen und rückmelden. Man (ich) kann das ja iterativ soweit ergänzen, bis es nachvollziehbar ist und später ggf. ins Wiki packen.

ANMERKUNG

Bitte <path> durch den entsprechenden Pfad auf dem jeweiligen System ersetzen.

INSTALLATION

1. Windows 8.1 (als meine Referenz - funktioniert natürlich auch auf anderen Systemen)
2. FreeCAD ab Version 0.19.19758 (Integration für Remote-Debugging mit VS-Code)
3. ptvsd

-> Konsole: <path>\FreeCAD\bin\Scripts
-> pip install ptvsd

Sofern pip nicht in das korrekte Verzeichnis installiert, kann das Zielverzeichnis explizit angegeben werden:

-> pip install ptvsd -t "<path>\FreeCAD\bin\Lib\site-packages"

4. pylint

-> pip install pylint

bzw. (siehe oben)

-> pip install pylint -t "<path>\FreeCAD\bin\Lib\site-packages"

KONFIGURATION VS-CODE

(exemplarisch)

'settings.json' (Konfiguration für Linting und Code-Completion)

-> File -> Open Folder (öffnen des Arbeitsverzeichnisses)
-> File -> New File
-> File -> Safe As (-> Python)

Um die 'settings.json' automatisch generieren zu lassen. Ctrl + Shift + p -> tippen: Settings -> Preferences: Open Workspace Settings
Wenn im Settings-Dialog lediglich eine Einstellung temporär getoggelt wird, wird automatisch das Unterverzeichnis '.vcode' und die Datei 'settings.json' erstellt.

Code: Select all

{
    "python.linting.pylintEnabled": true,
    "python.linting.enabled": true,
    "python.linting.pylintPath": "<path>\\FreeCAD\\bin\\Lib\\site-packages\\bin\\pylint.exe",
    "python.linting.pylintArgs": [
        "--init-hook=\"import sys; sys.path.append('<path>\\FreeCAD\\Mod\\A2plus')\""
    ],

    // "python.pythonPath": "C:\\ProgramData\\Miniconda3\\python.exe",
    "python.pythonPath": "<path>\\FreeCAD\\bin\\python.exe",
    
    "python.autoComplete.extraPaths": [
        "<path>\\FreeCAD\\Mod\\A2plus",
        "<path>\\FreeCAD\\lib",
        "<path>\\FreeCAD\\bin"
    ]
}
Soll der Linter besondere Verzeichnisse berücksichtigen, müssen diese durch einen 'init-hook' wie oben gezeigt definiert werden. Hier ist exemplarisch lediglich das Modul 'A2plus' vorgesehen. Ich gehe davon aus, dass eine Beschränkung auf '<path>\\FreeCAD\\Mod' alle Module berücksichtigt (bitte testen). Gleiches gilt für die Extra-Pfade im Bereich Code-Completion.

'launch.json' (Konfiguration für Remote-Debugging)

-> Debug -> Start Debugging
-> 'Python' als Environment aussuchen
-> Remote Attach (beide Fragen mit Enter bestätigen -> Fehlermeldung -> Cancel)
-> auf der rechten Seite erscheint der Hinweis "To customize Run and Debug cerate a launch.json file" -> click

Es gibt sicher einen direkteren Weg, die 'launch.json' automatisch zu erzeugen. Wer ihn findet, bitte ersetzen / ergänzen!

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": "<path>\FreeCAD\Macro\VSC_Debugging_Test",
                    // "remoteRoot": "<path>\FreeCAD\Macro\VSC_Debugging_Test"
                }
            ]
        }
    ]
}
ANWENDUNG

FreeCAD: -> Macro -> Attach to remote debugger -> VS Code -> OK

FreeCAD "friert ein" und wartet auf den Verbindungsaufbau durch den Remote-Debugger (in diesem Fall VS-Code)

VS-Code: -> Debug -> Start Debugging

Remote-Verbindung wird aufgebaut. Die aktive Remote-Verbindung wird durch einen Farbwechsel der Statusleiste unten angezeigt (blau -> orange)

Beispiel Breakpoint:

- Skript in VS-Code öffnen
- Breakpoint setzen
- Skript aus FreeCAD starten
- Skript stoppt am Breakpoint in VS-Code

Die Code-Completion kann an der jeweiligen Stelle des Cursors mit der Tastenkombination Strg + Space erzwungen werden, sofern sie nicht automatisch einsetzt.

PROBLEME

- Code-Completion zögerlich [Loading ...] (bekanntes Problem von VS-Code)
- keine Code-Code-Completion für die Module FreeCAD und FreeCADGui (Uhrsache bekannt, siehe Erläuterung Werner im Post)
- sporadischer Zeilenversatz zwischen Debugger (VS-Code) und FreeCAD bei der Codeausführung (gestern bemerkt, schaue ich mir an)

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

Re: Code Debugging

Postby MrRossi » Mon Mar 09, 2020 8:08 pm

Hallo Markymark

Danke für das erstmal.
Ich habe das 1 zu 1 nachgebaut und soweit hat das auch geklappt.

Allerdings hatte ic nicht wirklich einen Code offen und das Debugging zu testen.
Als ich dann versuchte das für ein bestehendes Makro nochmal zu machen, klappte das nicht.
Ich meine, ich ging das nicht 1 zu 1 wieder durch. Ich nahm die **json files und habe die einfach
kopiert. Irgendwie klappte es dann doch nicht.

Kann momentan das ganze nicht nochmal neu machen. Muss das nochmal probieren.

Eoin etwas einfacherer Weg für das wäre allerdings doch begrüßenswert, meint ihr nict auch?

Grüße
Christian
User avatar
Markymark
Posts: 160
Joined: Sun Nov 03, 2019 4:54 pm

Re: Code Debugging

Postby Markymark » Tue Mar 10, 2020 3:49 am

Eoin etwas einfacherer Weg für das wäre allerdings doch begrüßenswert, meint ihr nict auch?
Naja, das liegt ein wenig in der Natur der Sache. Letztendlich versucht man, einen Feld-, Wald- und Wieseneditor wie VS-Code als Python-IDE für FreeCAD zu verwenden. Das war von den Jungs und Mädels von VS-Code sicher nicht so vorgesehen und ich finde das schon ganz großes Kino, dass das so möglich ist. ptvsd und pylint zu installieren ist nun einmal notwendig. Die Pfade für die Python-Umgebung und die Module bekannt zu machen lässt sich auch nicht umgehen. Letztendlich hat Werner den Attach-Prozess kurzerhand auf das absolute Minimum reduziert ... gefühlt hatte er das 5 Minuten nachdem das angesprochen wurde eingebaut. Einfacher ist dann irgendwann nicht mehr ...

Die Konfiguration erfolgt jetzt auf "Folder"-Ebene. VS-Code kennt noch "Workspaces" und die ganz globalen Settings. Hier könnte man natürlich möglicherweise auch die entsprechende Konfiguration vornehmen ... müsste man sich ansehen. Dann tut es VS-Code aber in dieser Form nur noch mit der Komination Python/FreeCAD ... zumindest wenn man die globalen Settings ändert. Wäre jetzt nicht mein Ziel ... Sich die Workspaces noch mal anzusehen, könnte Sinn machen.

Luft nach oben ist immmer ...

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

Re: Code Debugging

Postby Markymark » Tue Mar 10, 2020 3:59 am

Hier scheint es eine Lösung für die Code-Completion-Problematik mit den Modulen FreeCAD und FreeCADGui zu geben:

https://github.com/gtalarico/ironpython-stubs

Der Link stammt aus deinem (Christian) obigen Link. Werde ich mir ansehen ...

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

Re: Code Debugging

Postby MrRossi » Sun Apr 19, 2020 1:48 pm

Hallo zusammen

Ich möcht das Thema nochmal aufgreifen.
Ich habe einen Weg gefunden, mit dem man durchaus brauchbar Debugging durchführen kann, eigentlich ist es
fast komplett.

Also, da ich beruflich für Coding Visual Studio Community 2019 nutze, dachte ich mir nimmst das auch für Python.
Dafür die Python-Umgebung installiert und fertig.
Debuggen kann man so:
FreeCAD starten und soweit hin arbeiten, bis der zu debuggende Code "nahe" ist.
Dann in VS unter "Debuggen" --> "An den Prozess anhängen..." wählen, FreeCAD aus der Liste auswählen und "Anfügen".
Danach an den gewünschten Stellen die Haltepunkte setzen.
Jetzt mit FreeCAD weiterarbeiten und an den Haltepunkten bleibt die Code-Ausführung stehen.
Jetzt kann man ganz easy und bequem mit F11 durch die Zeilen blättern und interessant beobachten,
was sich so in den Variablen abspielt.

Hat mir schon ein paar Mal die Sache erleichtert.

Grüße
Christian