04-26-2011 06:38 AM
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
Solved! Go to Solution.
04-27-2011 01:16 AM
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
04-27-2011 02:02 AM
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.
04-27-2011 03:18 AM
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
Matthias
Matthias Alleweldt Project Engineer / Projektingenieur | Twigeater? |
04-27-2011 03:18 AM
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
04-27-2011 03:44 AM
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ß
04-27-2011 04:05 AM
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? |
04-27-2011 06:29 AM - edited 04-27-2011 06:29 AM
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