2010-07-21 2 views

Répondre

0

Si l'application s'est bloquée plutôt que s'est bloquée, essayez de charger dans windbg et exécutez !analyze -v -hang ou essayez d'utiliser adplus en mode de blocage. Cela tente de déterminer la cause du blocage qui devrait vous donner une pile d'appel plus significative. La commande !locks peut également être utile si vous avez un blocage en vous montrant ce qui bloque une ressource.

+0

Merci, je peux essayer ces commandes en environnement de semi-production si je peux le reproduire. Pour la production, les techniciens n'ont pas le temps d'attendre pour que nous puissions le déboguer. – user397954

1

Deux raisons pour lesquelles une pile d'appel peut sembler incorrect:

  1. La pile peut être endommagé. Si la pile a été corrompue pour une raison quelconque (par exemple, en raison d'un débordement d'un tampon qui a été alloué sur la pile), toutes les trames de pile sont détruites. Cela rend impossible le calcul de la liste des appelants.

  2. Les symboles que vous utilisez (le cas échéant) peuvent ne pas convenir au binaire qui s'est écrasé. Vous devez utiliser exactement les mêmes symboles que ceux utilisés lors de la compilation du binaire. Une légère modification du code source peut rendre tous les symboles invalides.

+0

Les symboles doivent correspondre au binaire. probablement la pile était corrompue. – user397954

0

Si vous appelez dans l'API Windows de qui appellent alors de nouveau dans vous sur le même fil (via les gestionnaires de messages Windows, par exemple), il est pas rare que les opérations pour utiliser les conventions de la pile de la DLL de Windows que le débogueur ne peut pas interpréter. Il n'est pas nécessaire que la pile soit traçable tout le temps lors de l'exécution d'une fonction/méthode c/C++, les registres liés à la pile peuvent être réutilisés à d'autres fins et les emplacements standard d'informations de pile peuvent être ignorés. Je vois ça beaucoup dans Windows.

Questions connexes