12
votes

Imprimer n niveaux de callstack?

Utilisation de C ++ avec Visual Studio, je me demandais s'il y a une API qui imprimera la CallStack pour moi. De préférence, j'aimerais imprimer une appelle 5 niveaux de profondeur. Windows fournit-il une API simple pour me permettre de le faire?


0 commentaires

4 Réponses :


10
votes

On dirait que la bibliothèque Dbghelp de Microsoft peut faire ce que vous voulez. Consultez la documentation de la fonction StackWalk64 sur MSDN pour plus d'informations. En outre, Cet article de codeProject peut être utile.


0 commentaires

0
votes

Regardez l'API StackWalk et StackWalk64 de l'API DBGHELP.


0 commentaires

1
votes

Je crois que vous pouvez obtenir cela de leur API de débogueur ( DBGHELP ).


0 commentaires

6
votes

Il y a un certain nombre de façons de faire cela.

voir Comment enregistrer des cadres de pile avec Windows X64 p>

À mon avis, le moyen le plus simple et le plus fiable est la fonction API Win32: P>

USHORT WINAPI CaptureStackBackTrace(
     __in       ULONG FramesToSkip,
     __in       ULONG FramesToCapture,
     __out      PVOID *BackTrace,
     __out_opt  PULONG BackTraceHash
);


2 commentaires

Cela ne génère aucune information symbolique. Quelle utilisation est un tas de valeurs de pointeur?


Les programmes C / C ++ ne contiennent jamais d'informations symboliques par défaut. Voir ici pour façons d'ajouter des symboles à une pile dump: drdobbs.com/architecture-and-design/...