2009-04-10 10 views
1

J'ai un espace de travail MSVC 6.o, qui a tout le code C.
Le code est exécuté sans commutateur d'optimisation avec l'option O0 et en mode débogage. Ce code est obtenu auprès de tiers. Il exécute souhaitable comme il est.Problème de crash de code étrange?

Mais lorsque j'ajoute quelques instructions printf dans certaines fonctions pour le débogage, puis que j'exécute le code, il se bloque.

Je suppose qu'il s'agit d'une sorte de débordement de code/de données sur un segment de mémoire/page de mémoire ou quelque chose de ce genre. Mais le code n'a pas de spécificateur de carte mémoire, ou fichier de commande de l'éditeur de liens mentionnant les segments/carte mémoire etc.

Comment puis-je affiner la cause, et le correctif pour ce problème bizarre?

Répondre

0

Utilisez string.getbuffer lors de l'impression des objets cstring dans printf. Il pourrait y avoir un problème pour les caractères larges et normaux. printf ("% s", str.Getbuffer()); str.ReleaseBuffer(); Cheers, Atul.

1

Vous pouvez essayer de déterminer l'origine du problème en consultant la trace de la pile dans Visual Studio. Vous devriez être en mesure de voir quelle est la séquence d'appels de fonction qui mène finalement à l'accident, et cela peut vous donner un indice quant à ce qui ne va pas.

Il est également possible que printf() provoque le plantage. Une cause possible - mais pas trop probable sous Windows - est une pile trop petite qui est survolée par l'appel de printf().

0

En général, lorsque vous tentez de gérer un incident, votre premier port d'appel doit être le débogueur.

Utilisé correctement, cela vous permettra d'affiner votre problème à une ligne de code spécifique et, avec un peu de chance, de vous donner une vue de la mémoire d'exécution au moment du crash. Cela vous permettra de voir la cause immédiate de l'accident.