DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

Rücksprungadresse ermitteln

Solved!
Go to solution

Hallo,

 

ich habe hier ein sehr großes Diadem Script, in diesem wird eine bestimmte Funktion sehr häufig aufgerufen.

Zu Dokumentationszwecken soll diese Funktion in ein Text File schreiben, woher sie aufgerufen wird.

Ich möchte also die Rücksprungadresse auslesen.

 

Gibt es dafür einen Befehl?

 

Gruß Dadom

 

 

 

 

0 Kudos
Message 1 of 8
(5,679 Views)

Hallo Dadom,

 

so ganz verstanden habe ich deine Anfrage nicht, aber ich vermute, dass du soetwas wie einen Log-Mechanismus, der bestimmte Vorgänge oder Abschnitte protokollieren soll, erstellen möchtest.Dann könnte man das so umsetzen:

 

 

Dim intLineNo, intMyHandle, intMyError 
intLineNo = 0
intMyHandle = TextFileOpen(ScriptWritePath & "MyLogFile.txt", TfCreate OR TfWrite OR TfANSI) 
.....
intLineNo = intLineNo + 1
intMyError = TextFileWriteLn(intMyHandle, "Line " & intLineNo & "Mein Text....")
.....
intMyError = TextFileClose(intMyHandle)

 

Für die Zeilen mit TextFileWrite kann man natürluch auch eine Funktion erstellen, die das Handle, die Zeilennummer und den Text als Übergabeparameter hat.

 

Ich hoffe, dass hilft dir weiter.

Walter

 

0 Kudos
Message 2 of 8
(5,665 Views)

Hallo Walter,

 

danke erstmal, aber dein Quelltext schreibt ja nur Informationen in ein Text File, soweit war ich auch schon.

 

Ich Versuche nochmal zu erklären was ich möchte:

 

Ich habe als Beispiel hier 2 Funktionen func1 und func2:

 

function func1()
...
call func2()
...
end function


function func2()
...
TextFileWriteLn(TextFileName, "func2 wurde aufgerufen von der Funktion:" & ????)
...
end function

 

 Ich möchte also wissen, aus welcher Funktion die Funktion func2 aufgerufen wird, in diesem Fall wäre das func1.

 

Ich hoffe damit ist es etwas klarer geworden.

 

 

0 Kudos
Message 3 of 8
(5,660 Views)

Hallo Doma!


In func2 gibt es keine Möglichkeit den Aufrufer festzustellen. Deshalb ist es notwendig der Funktion über einen Parameter die Information zu übergeben, was bei vielen Aufrufen sicher erst mal etwas Arbeit bedeutet Smiley Wink


Matthias

Matthias Alleweldt
Project Engineer / Projektingenieur
Twigeater?  
0 Kudos
Message 4 of 8
(5,657 Views)

Hallo Dadom,

 

ja, jetzt ist es klarer geworden. Mir fällt aber keine besserer Weg ein, als einen Übergabearameter zu definieren, der diese Info transportiert. Ich vermute jedoch das du diese Idee selbst schon hattest.

 

Gruß

Walter

0 Kudos
Message 5 of 8
(5,656 Views)

Ok, danke euch!

 

Aber woher weiß das Programm an welche Stelle es nach Beendigung von func2 hinspringen (zurückspringen) soll?

Die Information müsste doch irgendwo hinterlegt sein!?

Kann man die dann nicht irgendwie auslesen?

 

gruß 

0 Kudos
Message 6 of 8
(5,653 Views)
Solution
Accepted by topic author doma

Hallo Doma!


Prinzipiell hast du recht das für den Rücksprung klar sein muss wohin. Intern wird es dafür einen Stack (Stapel) geben auf dem diese Adresse bzw. bei verschachtelten Aufrufen die Adressen gelegt werden. Beim Rücksprung wird dann der oberste Wert vom Stack genommen. Selbst wenn man vom Skript auf diesen Stack zugreifen könnte - was in VBScript aber definitiv nicht geht - würde man dort nur eine Zahl finden, die sich ggf. auch noch von Programmlauf zu Programmlauf ändern würde. Aus dieser Zahl wieder eine für Menschen aussagekräftige Informationen wie func1 zu erstellen wäre die nächste Schwierigkeit.


Bei Programmen die mit einer höheren, compilierten Programmierspache wie z.B. C++ erstellt sind ist dies zwar möglich, aber auch nicht trivial und bedingt das zusätzliche Informationen d.h. Debug-Informationen im Programm enthalten sind. Bei Interpretersprachen wie VBScript die mit einem Zwischencode arbeiten müsste die Scriptengine diese Informationen mitführen und für den Programmierer offenlegen. Technisch möglich, da die Sprache aber möglichst einfach für 'normale' Anwendungen gestaltet wurde, nicht vorgesehen.


Bleibt also leider nur: Selbst ist der Mann 😉


Matthias

 

 

Matthias Alleweldt
Project Engineer / Projektingenieur
Twigeater?  
0 Kudos
Message 7 of 8
(5,649 Views)

Ok. Danke!

 

dann muss ich mal schauen wie ich das anders löse, wäre halt extrem bequem gewesen 😉

 

aber vielen Dank für die ausführliche Erklärung!

 

gruß doma

0 Kudos
Message 8 of 8
(5,644 Views)