IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Trouver l'instruction qui provoque une violation d'accès


Sujet :

Delphi

  1. #1
    Membre du Club

    Inscrit en
    Novembre 2008
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 69
    Points : 62
    Points
    62
    Billets dans le blog
    1
    Par défaut Trouver l'instruction qui provoque une violation d'accès
    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.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 621
    Points : 25 321
    Points
    25 321
    Par défaut
    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

  3. #3
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Citation Envoyé par GerardJ Voir le message
    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,

    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.

  4. #4
    Membre du Club

    Inscrit en
    Novembre 2008
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 69
    Points : 62
    Points
    62
    Billets dans le blog
    1
    Par défaut Oui mais en compilé ?
    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...

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par GerardJ Voir le message
    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 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)

  6. #6
    Membre du Club

    Inscrit en
    Novembre 2008
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 69
    Points : 62
    Points
    62
    Billets dans le blog
    1
    Par défaut
    merci, c'est un piste que je vais creuser !

Discussions similaires

  1. free() qui provoque une segmentation fault
    Par bringer dans le forum Débuter
    Réponses: 16
    Dernier message: 19/11/2010, 17h46
  2. Réponses: 3
    Dernier message: 01/03/2009, 18h09
  3. Trouver le user qui appelle une vue
    Par zoom61 dans le forum SQL
    Réponses: 12
    Dernier message: 16/12/2008, 10h29
  4. commande find: trouver les fichiers qui contiennent une chaine de caractère
    Par hammag dans le forum Administration système
    Réponses: 3
    Dernier message: 18/05/2008, 13h19
  5. Réponses: 2
    Dernier message: 18/03/2008, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo