Da schreibt man ein Buch… denkt man kennt sich einigermaßen aus mit dem Thema…
Und fast eineinhalb Jahre später, kann man Scripte debuggen und ich weiß von nichts… keiner schreibt was in dieses Internet. Dann mach ich das mal.
Seit EPLAN 2.4 ist es möglich Scripte zu debuggen. Es gibt kleine Einschränkungen aber man kann sich endlich die unendlichen MessageBoxen und Scripte Neulad-Szenarien sparen.
Es gibt, wie so oft, eine versteckte Einstellung welche gesetzt werden muss, damit das Debuggen funktioniert.
Ich habe es mal in das kostenlose Script ExtendedSettings gepackt.
Der Einstellungspfad ist folgender:
USER.EplanEplApiScriptLog.DebugScripts
In Visual Studio dann einfach:
- Debug > Attach to Process…
- EPLAN.exe auswählen
- Attach
In EPLAN:
- Script laden/ausführen
EPLAN kopiert beim Laden/Ausführen eines Scriptes das Script in den Temp-Ordner.
Der Dateiname ist wie folgt aufgebaut:
Debug_[Scriptname]
Leider können dadurch keine Haltepunkte in EPLAN gesetzt werden. Dies muss per Code geschehen:
System.Diagnostics.Debugger.Break();
Aber: Ist einmal ein Breakpoint gesetzt worden, kann auch wie gewohnt in Visual Studio ein Haltepunkt gesetzt werden.
Wichtig: Wenn die EPLAN-Einstellung bzgl. Script Debugging nicht gesetzt ist, müssen diese Haltepunkte entfernt werden.
Als Workaround habe ich folgendes herausgefunden:
Mit der Compiler-Abfrage auf #if DEBUG kann dieses Problem umgangen werden.
#if DEBUG System.Diagnostics.Debugger.Break(); #endif
Hier noch ein kleines Demo Video:
Ich bin ziemlich traurig darüber dass ich das jetzt erst erfahren habe. Ich sollte mal die Emails zählen welche ich die letzten 1,5 Jahre beantwortet habe mit der Frage “ist debugging bei Scripten nicht möglich?”.
Vielleicht denkt jeder der diesen Weg schon kannte einfach dass ich das schon wüsste…
Naja, ich bin einfach nur froh um diese Funktion!
Anbei noch mein Beispiel:
using System; using System.Linq; using System.Windows.Forms; using Eplan.EplApi.Base; using Eplan.EplApi.ApplicationFramework; using Eplan.EplApi.Scripting; using System.Windows.Forms; using Eplan.EplApi.Scripting; namespace ibKastl.Scripts.Test { public class Test { [Start] public void Action() { #if DEBUG System.Diagnostics.Debugger.Break(); #endif MessageBox.Show("Start walking..."); #if DEBUG System.Diagnostics.Debug.WriteLine("Walk 500 miles..."); #endif for (int i = 1; i <= 500; i++) { #if DEBUG System.Diagnostics.Debug.WriteLine("Mile {0}: still walking...", i); #endif } MessageBox.Show("End"); } } }
Kleiner Tipp:
Das Debuggen von Scripts geht auch mit Notepad++ und der Erweiterung CS-Script.
Hi Johann,
I have one comment. It seems to be a very useful tool!
But there is still somethings not very clear to me.
If I set the “USER.EplanEplApiScriptLog.DebugScripts” in EPLAN and forget to “Attach to process” in VS, EPLAN crashes. Does it happens the same to you?
Assuming that everything is right, when you execute the action in EPLAN, VS will now and start debugging, which is great.
Seems that VS creates a Debug_(NAME_OF_YOR_FILE).cs and opens this file in a new tab which then uses for debugging.
The problem is that when you change your original file (your’s), changes are not considered in the debug file. Even if you stop debugging and close the Debug file tab, it keeps using the “old” debug file without the changes. This happens even if you say “Yes” to consider the “external” changes.
Do we need to exit VS or EPLAN in order for those changes to take effect?
Also, you cannot change “things on the go” right? By other words, can you change code while debugging?
It would be good to know from your experience how you deal with this.
Or maybe I;m just doing something wrong…
Please feedback.
Regards,
Pedro
When you start debug
Hi Pedro,
all things you have written are right.
But you can change the debugging Debug_ file on the fly, and commit these changes to your original file.
Hi Johann,
It would be great to know how!
On everything I do, changes I do on the original file are not synchronised to the Debug_MYFILE.cs and even if I had changes in the debug file, I can after not import them back into the original (unless I copy and paste), but then it makes it difficult to trace the changes. I’m sure there is a logical way to “tell” visual studio to interchange changes from one side into another, but I don’t really now how…. I’m using the express version, could this be problem? I’m lost here.
If you could give some tips I would appreciate.
Regards,
The only way, i know, is to copy / paste the changes to the original file.
Hi Johann,
Am I right to say that we can’t save or consider changes on the Debug_ file when you are attached to the process (EPLAN) and are running the script, which forces the original file to be locked?
I’ve tried to do so, but any changes I do in the Debug_ file, even if I save it, aren’t considered (F10/F11) seems to ignore those new lines and jump over any new code added…
I just need to be sure it is the same with other users and avoid to be doing something wrong by lack of knowledge.
Please comment.
Regards,
You have to reload the script if you made changes.
I do this automatically, with a other script :)
This script unloads and reloads the script and execute it. Look here.
Hi Johann,
But, whatever you do, you’ll still need to copy the changes from the Debug_ file across to the original file, can you please confirm that?
This method will allow us to Debug in VS without the need to use the #if DEBUG System.Diagnostics.Debugger.Break(); #endif, right?
I think this is very good, the downside is that you’ll always have to start EPLAN on every start at VS (which will close EPLAN on every stop).
Is the above right?
Regards,
Changes to file: Yes, you have to
EPLAN in Debugging: I would not recommend that, buts right if you dont work with compiler attributes
OK, vielen Dank für die Rückmeldung!
[…] das Script-Debuggen muss man sich ja an den EPLAN Prozess hängen… Das kann man auch recht schön […]
[…] hatte hier mal beschrieben wie man den Debugger automatisch anhält… Leider zeigt EPLAN einen Fehler […]