2009-12-09 2 views
2

Supposons qu'il existe des méthodes methodA(), methodB() et methodC().Répondre "Quelle méthode m'a appelé?" à l'exécution en .NET? Ou est-ce que les données CallStack sont lisibles par le code?

Et methodC() est appelée au moment de l'exécution.

Est-il possible de savoir methodC() est appelée à partir de quelle méthode?

Je pensais si CallStack peut être lu à l'exécution pour certaines vérifications? Si oui, je pense que ça ne devrait pas être un gros problème.

Des idées?

Merci!

+1

Une meilleure question que "est-ce possible" est "est-ce souhaitable". Je n'ai jamais vu une raison valable de le faire - seulement des raisons invalides. S'il vous plaît dites ce que vous essayez d'accomplir. –

+3

John, cela peut être très utile lors du débogage. Lorsque vous avez un énorme code, une approche étape par étape n'est pas toujours l'option. –

+0

En fait c'est de la curiosité. J'utilisais un ensemble d'entraînement que vous installiez sur VS et j'essayais d'accomplir la tâche qu'ils vous donnaient en écrivant un code. Je me demandais comment ils analysent mon code. Comment savent-ils qu'une méthode est appelée à partir de quelle méthode, etc. Peut-être qu'ils le font d'une manière complètement différente, mais cela a simplement soulevé cette question dans mon esprit. – pencilCake

Répondre

7

Utilisez les classes StackTrace et StackFrame. Par exemple:

StackTrace stackTrace = new StackTrace();   
    StackFrame[] stackFrames = stackTrace.GetFrames(); 

    foreach (StackFrame stackFrame in stackFrames) 
    { 
    string method = stackFrame.GetMethod().Name; 
    // do some stuff with method 
    } 
+0

sachez que c'est une fonction coûteuse que vous ne voulez probablement faire que dans des circonstances exceptionnelles. Difficile d'imaginer ce que vous voulez faire qui ne fait pas déjà partie de StackTrace dans une classe dérivée d'une exception. Si vous envisagez de vous connecter, vous devrez vous demander si les frais généraux en valent la peine. –

Questions connexes