2009-07-29 5 views
0

J'ai une fonction (FunctionA) qui est appelée par une autre fonction (FunctionB). Le problème est, je ne suis pas sûr quelle fonction "FunctionB" est.Comment puis-je déterminer quelle fonction est appelée une autre fonction dans ActionScript 2?

Je cet extrait de code:

function FunctionA():void { 
    trace("This function was called by " + ???); 
} 

J'ai besoin de savoir ce qu'il faut mettre pour « ??? » donc l'instruction trace de FunctionA ressemble à ceci:

This function was called by FunctionB

Que devrais-je mettre pour "???"?

Répondre

1

Une idée qui vient à l'esprit est de regarder la trace de la pile actuelle. L'entrée avant la méthode en cours d'exécution doit être la routine appelée dans FunctionA.

Example

(Ceci est pour ActionScript 3.0 mais je suis sûr qu'il devrait être disponible dans les versions précédentes)

+0

Il lance l'erreur: "Il n'y a pas de méthode avec le nom 'getStackTrace'." Je suppose que c'est AS3 seulement. –

0

Je ne pense pas trace de pile est disponible en AS2.

Pour chaque site d'appel possible, ajoutez la ligne

arguments.callee.__caller="somestr"; 

où somestr est unique.

En fonction A

trace(arguments.caller.__caller); 

En réponse au commentaire:

Je suppose que théoriquement, on pouvait marcher l'objet _global recherche récursive pour les fonctions et les étiquetant.

Je suppose que vous n'utilisez pas l'IDE Flash? Cela a un débogueur (assez lent et mauvais), mais il devrait vous donner une trace de pile (si la mémoire me sert bien)

+0

Le seul problème avec cette technique est que j'ai reçu ce logiciel, et je ne suis même pas sûr de ce que l'on pourrait appeler. Y at-il un moyen de lier dans le film racine pour tracer chaque fois qu'une fonction est appelée? –