Est-il possible d'obtenir les valeurs des paramètres pour chaque cadre de la pile d'appels dans .NET

StackOverflow https://stackoverflow.com/questions/819576

  •  03-07-2019
  •  | 
  •  

Question

Je parle de code .NET géré. Si nous exécutons un programme et y attachons un VS, nous pouvons voir les valeurs des paramètres pour chaque méthode de la pile d'appels. J'aimerais créer une solution de journalisation qui enregistrera les valeurs de tous les paramètres pour chaque méthode de la pile d'appels. En fait, j’ai besoin de cette information au cas où une exception se produirait.

Je sais que c’est possible avec l’API de profilage. Mais je me demande si cela est possible uniquement avec du code géré.

UPDATE: Ok, probablement avec .NET pur, c'est impossible. Alors peut-être avec une sorte de code non managé ... le but est de le faire depuis l’application elle-même. Une application en cas d'exception peut appeler une bibliothèque (non gérée) qui renvoie des informations sur les valeurs des méthodes dans la pile d'appels. Juste des pensées ...

Était-ce utile?

La solution

Les valeurs de paramètres ne sont pas stockées dans l'instance StackFrame. En fait, ils ne sont pas du tout enregistrés, sauf si vous choisissez de le faire explicitement.

Un moyen évident de consigner ces valeurs consiste à utiliser AOP. Cela impliquerait certainement un coût, mais en conjonction avec un cadre de journalisation et le bon niveau de journalisation, cela peut constituer une alternative. Vous pouvez également choisir d’instruire uniquement certains types / méthodes dans votre code de base, où les exceptions sont plus susceptibles d’être levées. Je choisirais probablement Postsharp pour ses capacités de tissage statique, pour émettre des appels de journal.

Quoi qu’il en soit, c’est loin d’être une solution idéale, mais je crains fort que vous n’ayez pas beaucoup d’options si vous êtes coincé dans le monde géré.

Autres conseils

Votre meilleure option consiste probablement à insérer le code de trace requis dans les méthodes appropriées. De cette façon, vous pouvez attacher des écouteurs de trace et vider des valeurs si nécessaire.

Je sais que ce n'est pas ce que vous demandez, mais c'est un moyen d'obtenir les données.

Vous pouvez également déboguer l'application à l'aide de WinDbg. Les commandes! Clstack /! Dso vous permettront d'inspecter des paramètres et d'empiler des objets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top