Cancel
Showing results for 
Search instead for 
Did you mean: 

Beobachter auf Methodenaufruf

Creator
Creator

Hallo,

ich möchte gerne protokollieren, von welchen anderen Methoden eine bestimmte Methode während der Laufzeit aufgerufen wird. Gibt es einen Trigger, der bei einem Methodenaufruf gestartet wird? Oder eine Variable die mir anzeigt, das eine Methode ausgeführt wird, weil dann könnte ich einen Beobachter auf diese Variable setzen.

Für die gesuchte Lösung möchte ich am Quelltext der aufrufenden und aufgerufenen Methoden nichts ändern. Hintergrund meiner Frage ist die Analyse eines komplexen und wenig dokumentierten Modells.

Die Methodenaufrufe über die Quelltextsuche zu finden hilft hier leider auch nur bedingt weiter, weil viele Methoden als freie Attribute implementiert sind und die Suche diese leider nicht berücksichtigt.

Danke und Grüße

dst 

simple++ / eM-Plant / Plant Simulation
9 REPLIES

Re: Beobachter auf Methodenaufruf

Phenom
Phenom

An alternative to  setting ? in the code, to access the calling method object in your (sub-) method ,

 

is to  set a break point (or to set debug) to trigger the debugger to show the calling method.

Re: Beobachter auf Methodenaufruf

Siemens Phenom Siemens Phenom
Siemens Phenom

Hallo,

 

was hier gemacht werden kann ist einen Breakpoint in die zu untersuchende Methode zu setzten. Danach kann man mit dem Modell einen Simulationslauf starten. Hierbei wird sich der Debugger jedes Mal öffnen, wenn die besagte Methode irgendwo aufgerufen wird. Nun kann man unter dem Reiter "Call Stack" sehen, über was für eine Aufrufkette diese Methode gestartet worden ist, wobei hier der unterste Eintrag den Anfang darstellt. Zusätzlich kann man noch unter "Call Chains" detailliert einsehen, von wo genau der Methodenaufruf ursprünglich initialisiert worden ist.

Kind regards,

Igor
------------------------------------------------------------------------------------------------------
Did you like the answer? Then click the Thumbs Up button.
Did the answer solve your problem? Then accept the answer as solution


Re: Beobachter auf Methodenaufruf

Creator
Creator

@IgorKunjavskij

sämtliche Aufrufketten per Debugger verfolgen zu wollen, ist mir in einem komplexen Modell viel zu aufwendig. Ich müsste mich ja durch hunderte oder tausende Methodenaufrufe einzeln durchklicken. Nein, ich hätte mir die aufrufenden Methoden gerne in eine Tabelle geschrieben. Dazu benötige ich jedoch einen Trigger. Per Beobachter würde es aber nur gehen, wenn es beispielsweise ein passendes Attribut gäbe (es tauchen ja immer wieder mal auch undokumentierte Attribute und Methoden aufSmiley Wink), an dem ich erkennen kann, dass eine Methode ausgeführt wird. Oder es gibt für den Fall der Methodenaufrufe -außer dem Beobachter- noch einen anderen Trigger??

 

simple++ / eM-Plant / Plant Simulation

Re: Beobachter auf Methodenaufruf

Creator
Creator

@simulator

using breakpoints takes to long in this model. To much methods and callchains ...

My idea was to log calling methods in a table. But that requires a kind of trigger.

simple++ / eM-Plant / Plant Simulation

Re: Beobachter auf Methodenaufruf

Siemens Phenom Siemens Phenom
Siemens Phenom

Hallo,

 

für den Fall, dass die Aufrufe protokolliert werden sollen, wäre die andere Möglichkeit, hier einmal eine Tabelle in dem Modell anzulegen mit jeweils der ersten Spalte als String formatiert und der zweiten als Objekt. Danach bräuchte man noch eine globale Variable, z.B. i und die folgenden Zeilen Code in der zu untersuchenden Methode 

 

var caller_name:=?.name--Name des aufrufenden Objekts
var caller_location:=?.location--Ort des aufrufenden Objekts
var status:=TableFile.find({1,*},caller_name)--Abfrage, ob Aufruf schon protokolliert ist
TableFile.setCursor(1,1)

if status/=true--Falls Aufruf noch nicht protokolliert, wird er hier in die Tabelle geschrieben
	TableFile.writeRow(1,i,caller_name)
	TableFile.writeRow(2,i,caller_location)
	i+=1;
end

Man könnte natürlich auch noch den Aufrufzeitpunkt und anderweitige Informationen hier reinschreiben. Oder aber man könnte eben, statt dass der Debugger sich jedes Mal öffnet, auch einen bedingten Haltepunkt setzten, wie z.B.

 

if «condition» -- Bedingung, unter welcher sich der Debugger öffnen soll
	debug
end

Dadurch wäre es möglich, sich nur Aufrufe der Methode unter bestimmten Bedingungen anzuschauen, falls diese bekannt sind. Bei all diesen Vorschlägen wären Änderungen am Quelltext nötig, welche jedoch recht einfach einzubauen und auch wieder zu entfernen sind. Gibt es einen bestimmten Grund, wieso nichts am Quelltext geändert werden darf? Wäre ansonsten so etwas eine mögliche Lösung für das Problem?

Kind regards,

Igor
------------------------------------------------------------------------------------------------------
Did you like the answer? Then click the Thumbs Up button.
Did the answer solve your problem? Then accept the answer as solution


Re: Beobachter auf Methodenaufruf

Creator
Creator

Vielen Dank. So ähnlich hatte ich das bereits programmiert. Hatte nur gehofft, die Lösung noch weiter vereinfachen oder optimieren zu können. Wäre halt noch schöner, wenn man die Methoden, deren Aufrufe man gerade analysieren möchte, einfach per Drag&Drop in eine Tabelle ziehen und später einfach wieder aus der Tabelle löschen könnte. Wäre einfach schneller und eleganter, als jeweils den Quellcode anpassen zu müssen (und danach daran zu denken, wieder den ursprünglichen Zustand herzustellen). Aber wenn es keine Möglichkeit gibt, einen Methodenaufruf als Ereignis mitzubekommen, dann bleibt nur dieser Weg.

simple++ / eM-Plant / Plant Simulation

Re: Beobachter auf Methodenaufruf

Siemens Phenom Siemens Phenom
Siemens Phenom
Die Aussage "Die Methodenaufrufe über die Quelltextsuche zu finden hilft hier leider auch nur bedingt weiter, weil viele Methoden als freie Attribute implementiert sind und die Suche diese leider nicht berücksichtigt." ist nicht korrekt. Die Suche findet auch in Methoden statt, die als benutzerdefinertes Attribut angelegt sind.

Regards

Always consider using the AttributeExplorer!

Re: Beobachter auf Methodenaufruf

Creator
Creator

@Eventdebugger

stimmt, da war ich gedanklich nicht ganz bei der Sache Smiley Embarassed. Methodenaufrufe in Methoden, die als freies Attribut angelegt sind, werden gefunden. Ich hatte das Problem, dass ich Methodenaufrufe nicht finde, die über einen Sensor erfolgen.

simple++ / eM-Plant / Plant Simulation

Re: Beobachter auf Methodenaufruf

Siemens Phenom Siemens Phenom
Siemens Phenom
ja, das ist leider so ... vielleicht hilft die in 14.1 verbesserte Funktion Debugger/Stop on Controls etwas weiter, denn die wirkt jetzt nicht mehr global (auf der root) sondern lässt sich auf frames beschränken ...


Regards

Always consider using the AttributeExplorer!