2010-07-07 18 views
3

Lors de l'exécution, lorsque myApp.exe se bloque, je reçois "exception Win32 non gérée" mais comment puis-je savoir quelle exception s'est produite? où est-ce que quelque chose a mal tourné?Exception Win32 non gérée

+0

Quelle langue utilisez-vous? Est-ce .NET? C++? – Oded

Répondre

0

S'il s'agit d'une application .Net, vous pouvez essayer de mettre un handler pour l'événement UnhandledException. Vous pouvez trouver plus d'informations à ce sujet et un exemple de code here.

En général, c'est un bon signe que votre gestion des exceptions soit cassée, cela vaut la peine de parcourir votre code et de trouver des endroits qui pourraient être lancés mais où vous ne gérez pas les exceptions.

0

Utilisez le débogueur. Vous pouvez exécuter le programme et voir quelle exception a été levée qui tue votre application. Il pourrait être en mesure d'identifier l'emplacement du lancer. Je n'ai pas utilisé le débogueur VS pour cela, mais dans gdb vous pouvez utiliser catch throw pour forcer un point d'arrêt lorsqu'une exception est lancée, il devrait y avoir quelque chose de similaire.

2

Pour une application C++ native, consultez ma réponse précédente ici: Detect/Redirect core dumps (when a software crashes) on Windows pour intercepter l'exception non gérée (qui fournit également du code pour créer une image de vidage sur incident que vous pouvez utiliser pour analyser ultérieurement le plantage. puis dans Visual Studio (je suppose que vous l'utilisez, sinon les autres IDE auront quelque chose de similaire), dans Debug/Exceptions, cochez la case 'Thrown' pour 'Win32 Exceptions'

1

Typiquement, Windows donnera Il y a des chances que le code d'exception soit 0xC0000005 Il s'agit du code d'une violation d'accès, lorsque cela se produit, vous aurez aussi trois autres bits d'information: l'adresse de violation, l'adresse violée et la type de violat ion (lire, écrire ou exécuter).

Windows ne le restreindra pas plus loin que cela, et souvent il ne pourrait pas le réduire de toute façon. Par exemple, si vous passez devant la fin d'un tableau dans votre programme, Windows ne réalisera probablement pas que vous étiez en train d'itérer sur un tableau. Il voit juste "lire: OK, lire: OK, lire: hors limites => page faute => VIOLATION D'ACCES". Vous devrez comprendre cela à partir de l'adresse de violation (votre code d'itération de tableau) et l'adresse violée (l'adresse hors-limites derrière votre tableau).