Bonjour,
Est-il possible connaisant l'adresse fournie dans le message d'erreur "Violation d'accès à l'adresse 004044EE ...) (par exemple !) de trouver l'instruction qui l'a provoquée ?
merci.
Bonjour,
Est-il possible connaisant l'adresse fournie dans le message d'erreur "Violation d'accès à l'adresse 004044EE ...) (par exemple !) de trouver l'instruction qui l'a provoquée ?
merci.
En débogage,
Normalement, le débuggeur t'emmène sur le code concerné lors d'une Notification d'Exception
Souvent, il ouvre la fenêtre CPU, et c'est souvent du code RTL qui est le lieu de l'exception mais pas sa cause.
Si par contre, il te positionne dans ton propre code, c'est les fonctions autour qu'il faut regarder
Exemple,
Le Code A modifie un Tableau mais déborde et écrit plus loin
le Code B consulte une variable (typiquement un objet) qui en mémoire est situé juste après le tableau, le Code A ayant endommagé cette zone mémoire, c'est le code B qui va déclencher une exception !
Au final, tu vas t'acharner sur le code B a comprendre l'exception alors que ce code n'est pas du tout en cause et c'est en réalité le code A le vrai coupable
Exploiter les adresses mémoires du message,
Pour la valeur incorrecte, à part des valeurs simples proche de 00000000 (comme 00000008 ou FFFFFFF8), c'est difficile d'en faire quelque chose
Pour l'adresse du lieu de l'exception, même via la fenêtre CPU, je n'ai jamais rien eu de concluant
Bonjour,
Vous lancez l'application, puis vous mettez un point d'arrêt avant le plantage. Une fois qu'il est arrêté sur le point d'arrêt le menu 'Search/ Go to Address' devient actif. Vous pouvez mettre l'adresse et vous verrez ou il vous amène.
Mais comme le précise ShaiLeTroll il n'y a pas de garanties que ça vous aide à trouver l'erreur directement.
en général, j'arrive à trouver lorsque je suis en EDI. Mais lorsque c'est compilé ? J'ai des serveurs qui tournent et qui de temps à autre me sortent ce type d'erreur qui ont l'air d'échapper à MadExcept...
merci en tout cas de vos réponses...
en théorie oui, il suffit de lancer l'appli en mode pas à pas sous Delphi et d'utiliser le menu "Chercher"/"Aller à l'adresse" 004044EE...
en pratique c'est moins facile en effet, une simple option de compilation (notamment DEBUG/RELEASE) en plus ou en moins et l'adresse peut ne plus être la même, et même si elle existe toujours, elle ne correspondra pas à l'instruction qui a provoqué l'erreur.
d'autre part, cette erreur peut très bien se trouver dans une DLL externe à l'application, l'adresse peut alors dépendre de l'ordre de chargement des DLL (pour les DLL chargées dynamiquement)
merci, c'est un piste que je vais creuser !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager