2017-05-24 7 views
0

Quelqu'un peut-il donner un exemple de la manière d'obtenir par programmation la pile d'appels du programme C++ en cours d'exécution sous Windows? À partir de certains threads (par exemple print call stack in C or C++), j'ai une suggestion pour utiliser DbgHelp. Cependant la bibliothèque semble assez grande et destinée à beaucoup plus de fonctionnalités que la pile d'appels, donc étudier la bibliothèque sans exemple peut prendre trop de temps. Aussi la bibliothèque semble obsolète car la dernière version, 6.12, est datée du 01 février 2010 (7 ans à partir de maintenant). Y at-il quelque chose de nouveau pour obtenir la pile d'appel de C++ maintenant?Exemple d'obtention de la pile d'appel C++ sous Windows

Si vous donnez un exemple d'utilisation de DbgHelp, pourriez-vous également décrire comment l'installer, l'ajouter au projet et l'expédier avec mon programme?

Je voudrais obtenir des noms non décorés de toutes les fonctions de la pile d'appels, de préférence avec les valeurs des paramètres.

+1

[Boost.Stacktrace] (http://boostorg.github.io/stacktrace/index.html) – genpfault

Répondre

0

Ce n'est pas une énorme quantité de travail de parcourir la pile d'appels en sautant l'ebp, CaptureStackBackTrace (https://msdn.microsoft.com/en-us/library/windows/desktop/bb204633(v=vs.85).aspx) le fera pour vous si vous ne voulez pas le faire vous-même.

+0

Si je comprends bien cela ne donnera que les adresses, mais pas les symboles (noms de fonctions). –

+1

Selon la façon dont le programme a été compilé, les symboles peuvent même ne pas être présents dans l'exécutable. –

+0

Obtenir les symboles est le contenu de la bibliothèque d'aide au débogage que vous avez mentionné que vous ne souhaitiez pas utiliser. (https://msdn.microsoft.com/en-us/library/windows/desktop/ms679309(v=vs.85).aspx) Les symboles peuvent être situés dans un certain nombre de fichiers et selon l'endroit où vous obtenez De vous, vous aurez une callstack de qualité variable. Si vous voulez juste les sortir d'un exe, vous devrez écrire partiellement un analyseur PE - https://msdn.microsoft.com/en-us/library/ms809762.aspx. pdb a la plus riche source de symboles mais je ne recommanderais pas de les analyser vous-même. –