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");
        }
    }
}