2010-09-09 15 views
0

Est-il possible de générer un arbre de fonctions à l'exécution? J'aimerais avoir une idée de ce que le programme appelle. Ceci est essentiellement la même chose que de rompre à un endroit particulier, de parcourir chaque fonction et d'enregistrer les noms des fonctions. Je n'ai pas de contraintes de performance. J'utilise Visual Studio, mais je n'ai pas besoin de le faire.Trace les appels de fonction non gérés lors de l'exécution?

// modifier

Pour clarifier, si j'avais fonction A fonction d'appel B et la fonction C, et la fonction B appels fonctionnent D, je voudrais la sortie exemple suivant:

(0.01s) -> Function A 
(0.02s) -> Function B 
(0.02s)  -> Function D 
(0.03s) -> Function C 

I Je ne veux pas d'un graphique d'appel statique. Je veux ce qui se passe sur la pile pour chaque appel de fonction à l'exécution.

+3

Votre question est un peu ambiguë: Voulez-vous générer un graphique d'appel? (Sauf pour les appels via des pointeurs de fonction, cela peut généralement être fait de manière statique, c'est-à-dire pas au moment de l'exécution). Voulez-vous savoir quelles sont les fonctions les plus appelées ou qui prennent le plus de temps? (Si c'est le cas, vous aurez besoin d'un profileur ou vous aurez besoin d'instrumenter manuellement votre code). Voulez-vous par programme casser votre programme pendant qu'il fonctionne et obtenir une trace de pile? Voulez-vous que votre programme puisse interroger à un endroit donné pendant l'exécution pour voir quelle est la pile d'appels? –

+1

Doxygen peut générer un graphique appelant et appelé, mais pas pendant l'exécution. –

+0

Je voudrais "Voulez-vous par programme casser votre programme pendant qu'il est en cours d'exécution et obtenir une trace de la pile", d'où la "runtime" partie de ma question. –

Répondre

1

Vous pouvez probablement y arriver avec toutes sortes d'approches différentes, mais je pense que votre meilleur pari est d'utiliser simplement un profileur. Comprendre "qui appelle combien de fois" est exactement ce à quoi sert cet outil.

+0

Je ne veux pas d'outil qui montre à quelle fréquence quelque chose est appelé. Je veux un outil qui montre exactement l'ordre des fonctions exécutées à l'exécution qui est appelée au moment de l'exécution. –