37 votes

StackTrace en Flash / ActionScript 3.0

Je veux voir la trace de la pile dans n'importe quelle fonction de mon code, donc j'ai fait quelque chose comme ceci pour l'appeler et imprimer la trace de la pile :

public function PrintStackTrace() {
    try {
        throw new Error('StackTrace');
    } catch (e:Error) {
        trace(e.getStackTrace());
    }
}

J'aimerais savoir s'il existe d'autres moyens de le faire. À certains endroits, la classe Error crée la trace de la pile, mais peut-être qu'elle ne l'a pas fait avec ActionScript 3.0, donc peut-être que ce n'est pas possible, mais je veux savoir.

Merci !

51voto

hasseg Points 5440

Pour autant que je sache, la seule façon de rendre la trace de la pile disponible pour votre propre code est via la fonction getStackTrace() dans la classe Error, comme vous le faites déjà. Pour répondre à l'exemple de votre question, j'aimerais toutefois préciser que vous n'avez pas besoin de lancer l'erreur - vous pouvez simplement la créer et appeler la méthode correspondante :

var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();

De plus, comme l'indique la documentation, cela ne fonctionne que dans la version de débogage de Flash Player. Vous pouvez donc intégrer cette fonctionnalité dans un bloc if qui vérifie la valeur de la variable Capabilities.isDebugger si vous voulez.

8voto

Glen Blanchard Points 344

À partir de Flash Player 11.5, les traces de la pile sont également disponibles dans les versions sans débogueur des lecteurs.

6voto

Joony Points 2563

Utilisez le débogueur Flex (FDB) fourni avec le kit SDK Flex. Il s'agit d'un débogueur en ligne de commande qui vous permet de déboguer les fichiers .swf, même ceux qui sont en ligne (s'il s'agit d'une version de débogage). Il vous permet de définir des points d'arrêt, d'imprimer/modifier des variables, de vider la pile et d'effectuer des opérations de débogage. ne nécessite pas d'ajouter de code supplémentaire . Un outil très utile dont vous ne devriez pas vous passer !

Les options fdb dont vous aurez besoin sont 'break' et pour spécifier la classe et la ligne où vous voulez que l'exécution s'arrête, et 'bt' ou 'info stack' pour vous donner un backtrace de la pile. Vous pouvez également afficher presque tout ce qui concerne l'application pendant son exécution.

2voto

Plamen Andreev Points 43

@hasseg a raison. Vous pouvez également conserver les informations de suivi de pile dans la version release (et non debug) en fournissant l'option -compiler.verbose-stacktraces=true lors de la compilation de votre SWF.

1voto

gaurav_gupta Points 61
var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();

écrivez ceci stackTrace dans n'importe quel fichier afin que vous puissiez voir les logs de votre programme en mode exécution également. Vous n'avez donc pas besoin de l'exécuter uniquement en mode débogueur. Écrivez-le dans uncaughtexception de l'application, il sera donc exécuté en dernier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X