2009-09-22 7 views
0

Comment puis-je reconnaître que la pile d'appels affichée par le débogueur lorsque mon programme se bloque peut être fausse et trompeuse. Par exemple, quand la callstack dit que les images suivantes peuvent être manquantes ou incorrectes, qu'est-ce que cela signifie réellement? En outre ce que le numéro + après l'appel de fonction dans le callstack signifie:Comment savoir que mon callstack est faux?

kernel32 LoadLibrary + 0x100 octets

ce nombre devrait être important pour moi, et il est vrai que si ce nombre est grand le callstack peut être Incorrect ?

Désolé si je vous demande vous quelque chose de trivial et évident

Merci à tous

Répondre

1

Pour commencer par le 2ème: kernel32!LoadLibrary + 0x100 bytes signifie que l'appel était de la fonction LoadLibrary (offset: +100 octets); Apparemment, il n'y avait aucune information symbolique identifiant exactement l'appelant. Cela en soi n'est pas une raison pour que la pile d'appel soit corrompue. Une pile d'appels peut être corrompue si les fonctions remplacent les valeurs de la pile (c'est-à-dire par débordement de la mémoire tampon), ce qui indiquerait probablement "0x41445249" (si mon nom l'écrasait) comme fonction d'appel.

Une façon de diagnostiquer la cause de votre accident serait de définir des points d'arrêt sur les fonctions identifiées par la pile d'appel ou d'utiliser votre débogueur pour effectuer une traçabilité (en fonction du système de débogueur &). Les pointeurs sont généralement un bon début (pointeurs NULL, pointeurs non initialisés) Bonne chance

+0

0x100 n'est pas réellement un décalage de 256 octets? –

2

Généralement, vous pouvez faites confiance à votre callstack pour être correct. Cependant, si vous relancez les exceptions explicitement au lieu de les laisser gonfler naturellement l'appel, l'erreur réelle peut être masquée dans la trace de la pile.

Questions connexes