2009-08-13 7 views
1

Lorsque j'essaie d'exécuter mon programme, il ne passe jamais dans la fonction main(), mais bloque simplement. Certains comment cependant, mon programme jette une exception dans l'une de mes classes comme le premier appel de la pile après de nombreux appels à ntdll.dll. L'exception semble être le facteur qui provoque mon programme à se bloquer avec un "< mauvais ptr>". Je suis incapable de déclencher les points d'arrêt que je définis, ce qui rend plus difficile de trouver l'origine du problème.Le programme C++ se bloque lors de l'exécution de ntdll.dll

+1

Ajoutez plus d'informations, par exemple: le vidage de pile quand il se bloque, l'appel API qui appelle dans le noyau et la source autour du plantage. –

+0

Le point ntdll est sans importance, c'est lorsque le thread est passé en noyau. Ajouter la pile complète –

Répondre

3

Vous devez déterminer l'appel système qui a provoqué le blocage. Normalement, ce genre de chose est le résultat du passage des ordures dans certaines API de Windows.

Utilisez un débogueur et examinez la pile d'appels. La dernière entrée qui est dans votre code est susceptible d'être la cause du problème. Il a probablement de mauvaises données qui ne gèrent pas correctement.

1

Cela ressemble à des objets globaux/singletons. Si l'un d'entre eux dépend l'un de l'autre, vous avez des problèmes. Je chercherais tous vos globals et mettrais un point de rupture dans le contructor de chacun. On dirait que le constructeur pour un global utilise un autre global mais le second n'a pas encore été construit.

Enfin, si ce n'est pas la cause, et que votre application charge des DLL tierces, elles pourraient être en conflit. Je me souviens qu'une fois les DLL d 'une file d' attente orbix et ms classées dans l 'une étaient chargées avant l' autre, tout fonctionnait si elles étaient chargées dans l 'autre sens. À la fin pour trouver ceci j'ai enlevé chaque chose jusqu'à ce que je sois juste parti avec une main vide et ai alors commencé à ajouter des choses une par une jusqu'à ce que j'aie trouvé le problème.

Questions connexes