[MSVC 7.1] Stack walking with DIA SDK

J’ai passé la journée à voir ce que je peux faire niveau crash log pour sur une application C++ Win32. L’idée c’est de choper la callstack quand on a une unhandled exception. Alors, en utilisant dbghelp.dll et StackWalk64 ça marche du tonnerre en debug. Mais en release, même avec les symboles, ça chie dans la colle. Ca déroule un bout de callstack, mais y’a toujours un endroit où ça tombe sur un frame pointer qui manque, et paf ça s’arrête, et je ne vois pas comment “sauter” par-dessus le trou (càd retrouver l’adresse de retour à partir du stack pointer).

En fouillant un peu, j’ai trouvé deux autres méthodes, l’une est d’utiliser _penter et _pexit (mais ça a un impact niveau performances et c’est finalement pas mal de bidouille), et l’autre est d’utiliser le DIA SDK (MSDN). Mais là le problème c’est que y’a très peu de références sur internet, et finalement les seuls trucs qu’on trouve à part la MSDN c’est des gens qui râlent qu’ils ne trouvent pas de documentation. Le seul exemple fourni fait juste un dump d’un PDB et n’illustre pas l’utilisation des interfaces d’exploration de la call stack.

Alors les chances sont minces que quelqu’un parmi vous ait une idée de la façon dont il faut s’y prendre, où de l’endroit où je peux trouver de la doc plus didactique que la référence de l’API, mais bon y’a quand même GloP et Boudin qui traînent dans les parages, sait-on jamais. Donc, tout ce qui parle de stack et de DIA, je prends. A vot’ bon coeur.