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

Langage Delphi Discussion :

Runtime Error 216


Sujet :

Langage Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 402
    Points : 300
    Points
    300
    Par défaut Runtime Error 216
    Bonjour,

    J'ai une application développée avec D2010 sous Seven.
    Sous Seven elle tourne sans soucis.
    Sous XP elle se plante au départ (même pas d'affichage de la fenêtre principale) et me donne un RunTime Error 216 à 00404FB2

    Y a-t-il moyen de remonter de 00404FB2 à la ligne de code ?

    Merci

    Bernard

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 402
    Points : 300
    Points
    300
    Par défaut
    J'ai un peu progressé dans la recherche du bug :
    Le pb est dès le départ, il n'apparait sous Seven et que si je fais du débuggage pas à pas avec F7 et avec la fenetre CPU ouverte !!
    Sur le premier F7 (lancement de l'application) la fenetre CPU affiche :
    RecadrerPhotos.dpr.11: begin
    005F6564 E9979A5071 jmp $71b00000
    005F6569 F0B8C4AF5E00 lock mov eax,$005eafc4
    005F656F E8C84BE1FF call @InitExe
    un F7 de plus et la fenetre CPU affiche :
    71B00000 B80000B071 mov eax,$71b00000
    71B00005 B92D02B071 mov ecx,$71b0022d
    71B0000A FFD1 call ecx
    71B0000C 64655F pop edi
    71B0000F 00558B add [ebp-$75],dl
    71B00012 EC in al,dx
    71B00013 83C43E add esp,$3e
    71B00016 004000 add [eax+$00],al
    J'avance avec F7, les deux "mov" se passent bien, mais le "call ecx" fait monter la fenêtre d'erreur du débuggeur avec ce message :
    access violation at 0x005f65d2: write of address 0x00000000. Processus stoppé.....
    Je clique sur OK et la fenetre CPU affiche :
    005F65D2 0000 add [eax],al
    005F65D4 0000 add [eax],al
    005F65D6 0000 add [eax],al
    005F65D8 0000 add [eax],al
    005F65DA 0000 add [eax],al
    005F65DC 0000 add [eax],al
    005F65DE 0000 add [eax],al
    005F65E0 0000 add [eax],al
    005F65E2 0000 add [eax],al
    005F65E4 0000 add [eax],al
    005F65E6 0000 add [eax],al
    005F65E8 0000 add [eax],al
    005F65EA 0000 add [eax],al
    005F65EC 0000 add [eax],al
    005F65EE 0000 add [eax],al
    005F65F0 0000 add [eax],al
    005F65F2 0000 add [eax],al
    005F65F4 0000 add [eax],al
    et il n'est pas possible d'aller plus loin.
    En mode pas à pas avec F7 sans fenetre CPU aucune erreur ne monte !
    Il n'y a aucun filtrage d'erreur dans le débuggeur !
    Sous XP plantage assuré, sous Seven tout fonctionne !

    Merci de m'aider.

  3. #3
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut
    Bonjour,

    L'erreur 216 est une erreur d'accés :
    EAccessViolation est la classe des exceptions des erreurs dues à des accès incorrects à la mémoire.

    Unité

    sysutils

    Description

    L'exception EAccessViolation est déclenchée quand une application :

    Déréférence un pointeur nil.
    Ecrit dans une page de code.
    Essaye d'accéder à une adresse mémoire pour laquelle il n'y a pas de mémoire virtuelle allouée à l'application.

    En tant que descendant de EExternal, EAccessViolation sauvegarde l'enregistrement d'exception Windows (s'il existe) dans sa structure de données ExceptionRecord.

    Remarque

    Les applications ne doivent pas déclencher directement d'exception EAccessViolation. C'est l'exécution qui déclenche cette exception.
    à rechercher dans votre code.

    PL

  4. #4
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    La question est : à quel endroit de ton code Delphi ça plante ? Tu met le code et tu indiques à quelle ligne ça plante & là on peut aider.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 402
    Points : 300
    Points
    300
    Par défaut
    Merci, c'est gentil de vouloir m'aider.

    Le pb c'est que ça plante à l'exécution avant d'afficher la fenêtre principale donc certainement dans l'initialisation d'une unité.
    Mais où : je ne sais pas

    Il faudrait pouvoir remonter à ligne de code à partir de l'adresse fournie par l'erreur :
    RunTime Error 216 à 00404FB2


    Il me semble que sous D3 ou D5 on pouvait. Sous D2010 je n'ai pas retrouvé cette possibilité.

    Merci

  6. #6
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Pourquoi ne pas faire du pas-à-pas dans le source du projet ?
    Tu saurais au moins quelle unité plante.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    si j'ai bien lu, cela n'arrive que sous XP alors que c'est développé sous Seven => pas de F7 !

    pê ajouter des lignes de log pour situer le point critique ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 402
    Points : 300
    Points
    300
    Par défaut
    F7 dès le départ : le bug ne se produit pas sous Seven

    Même avec F7 on ne trace pas dans les parties initialization des unités !

    Hier au soir j'ai pris le taureau par les cornes et j'ai procédé par élimination :
    J'ai viré toutes les fenetres autres que la principale. Compilation transfert vers la machine sous XP l'appli démarre.
    Donc c'est dans une des fenetres supplémentaires (je crois que c'est une chance c'est plus simple à gérer). Je trouve quelle fenetre.
    Dans cette fenetre, j'enlève toutes les clauses uses sauf celles de Delphi. Ca marche !
    Je rajoute une à une les autres unités jusqu'à retrouver le pb.
    Rien que de la mettre dans le uses sans faire appel à elle suffit à planter. C'est dans la partie initialization que ça se passe.
    Voir le source de cette unité GR32_Types.pas en PJ.

    Je n'ai pas compris où est le problème, j'ai trouvé une autre solution vu qu'avec D2010 on peut ajouter des ressources simplement.

    Par contre je pose toujours la question : Peut-on remonter à la ligne du source correspondant à une adresse de l'exe ?

    Merci à Tous
    Fichiers attachés Fichiers attachés

  9. #9
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ResDir := Pointer(PChar(ResPointer) + 6 + Index * SizeOf(TCursorResDir));
    il faudrait peut-être vérifier la taille des (P)Chars, même si je ne vois pas pourquoi elle serait différente entre XP et Seven...
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  10. #10
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Sinon tu peux essayer avec un soft style MadExecpt :
    http://madshi.net/madExceptDescription.htm

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 402
    Points : 300
    Points
    300
    Par défaut
    Merci

    Je vais tester MadExecpt. Je ne connaissais pas, leur pub semble prometteuse !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Wamp] Runtime Error 216
    Par seksaki dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 18/02/2013, 12h50
  2. [Free Pascal] Runtime error 216 - Pointeurs - Procédures - Unit
    Par ZeCaM dans le forum Free Pascal
    Réponses: 4
    Dernier message: 25/12/2009, 17h38
  3. Runtime error 216
    Par Kcintim dans le forum EDI
    Réponses: 7
    Dernier message: 17/02/2009, 23h42
  4. Réponses: 6
    Dernier message: 16/06/2006, 09h14

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