Thread Rekursion einer anderen Funktion feststellen?
(2 answers)
Opened by johann_p at 2008-04-03 22:44
Ich habe folgendes Problem: ich habe eine Closure geschrieben, die von einem bestehenden perl Programm verwendet wird, um auf eine Datenbank zuzugreifen und bestimmte Daten zu retournieren.
Diese Closure wird im Programm viele Male aufgerufen. Es kann auch passieren, dass diese Closure im Rahmen einer Rekursion aufgerufen wird: Funtion A ruft Closure auf bekommt Daten und ruft aufgrund der Daten potentiell wieder Funktion A auf die wiederum die Closure aufruft. Bei einer bestimmten Datenkonstellation kann es nun vorkommen, dass die Rekursion endlos wird: die Closure retourniert daten, die dazu führen dass Funktion A sich immer wieder rekursiv aufruft. Mein Problem: ich kann weder die Daten, noch die Funktion A ändern, sondern muss versuchen, die Rekursion in meiner Closure zu erkennen und dann statt der Daten undef zu retournieren. Ich sehe keinen anderen Weg als dass meine Closure den Calling Stack Frame irgendwie analysiert und so die Rekursion erkennt -- aber wie? Wie kann diese Problem gelöst werden? Wie kann man den Aufrufstack analysieren um zu erkennen dass eine Funktion zb schon 50 mal rekursiv aufgerufen wurde? |