DbgHelp 5.x versus DbgHelp 6.x: what were they thinking?!

 
  • home
  • ik
  • journaal
  • onderwerpen
  • software
  • klassiekers
« Posten via email Wouter's Journaal Zwart of wit? » (software)
2008-07-22 21:26

Voor "het" grote programma van mijn huidige werkgever heb ik onlangs een klein maar uitermate handig stukje programmacode geschreven. Deze maakt gebruik van Windows' Structured Exception Handling om fouten als NULL-pointer dereferenties en niet-afgevangen C++ excepties te detecteren. Indien er een fout gedetecteerd wordt stuurt 'ie de ontwikkelafdeling een mailtje met een stacktrace en nog wat informatie.

Om die stacktrace te genereren en met symboolnamen en regelnummers uit te rusten maakt deze code gebruik van DbgHelp, een library wat standaard bij Windows wordt meegeleverd. Nou heeft deze twee functies om een symboolnaam bij een adres op te zoeken: SymFromAddr() en SymGetSymFromAddr().

Met die twee functies blijkt er iets raars aan de hand te zijn. In de versie van DbgHelp die op mijn ontwikkelsysteem geinstalleerd staat (Windows XP SP3), zijnde versie "5.1.2600.5512", doet SymFromAddr() het wel, en SymGetSymFromAddr() het niet. In de laatste versie van de Windows debugging tools, op het moment van schrijven "6.9.3.113", werkt SymFromAddr() niet, en SymGetSymFromAddr() wel.

Bij zulke rariteiten is er eigenlijk maar een oplossing: altijd de "6.9.3.113"-versie van DbgHelp meeleveren met het programma en consequent SymGetSymFromAddr() gebruiken.

M'n hier aan verloren middag krijg ik niet terug, maar ik hoop dat ik iemand anders hiermee wat tijd bespaar...

© Wouter Coene, 2010 — valid xhtml 1.0 — valid css ​