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

WinDev Discussion :

Erreur système : Access violation (GPF)


Sujet :

WinDev

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 103
    Points : 105
    Points
    105
    Par défaut Erreur système : Access violation (GPF)
    Bonjour,

    Après avoir installé l'appli sur un machine, j'ai un erreur comme suit:


    Code erreur : 1020
    Niveau : erreur fatale (EL_FATAL)

    Dump de l'erreur du module 'WD150VM.DLL' (15.00Os).
    Identifiant des informations détaillées (.err) : 1020

    Erreur système : Access violation (GPF)
    EIP = 050C016D
    OS : Windows XP ou .NET Service Pack 3(5.1.2600)
    Registres :

    EIP = 050C016D EBP = 7E42AEAB
    EAX = 0316FF08 EBX = 00000000
    ECX = 0316FF08 EDX = 0324EE60
    ESI = 000B083E EDI = 7E429655

    Pile des appels :

    [???] 050C016D
    [???] 084D8BEC
    Pile invalide

    Informations supplémentaires :
    EIT_PILEWL :
    Procédure locale monProcedure
    (FEN_fenetre.PROCEDURE.monProcedure), ligne 18
    Le code à la ligne 18 est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FEN_fenetre..plan=2
    J'ai pensé que l'erreur vient du DLL (WD150VM.DLL) mais non.
    Je ne sais plus d'où vient cet erreur.
    Joie et Partage

  2. #2
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    J'ai déjà eu ce genre d'erreur, en générale c'est suite à une mauvaise façon de codé. (pour mon cas c'est lors de l'utilisation de thread ou de mauvaise libération de variable).

    Peux tu nous donner les grandes lignes de ton programme ainsi que le code qui précède le code en erreur.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 103
    Points : 105
    Points
    105
    Par défaut
    Avant le Fen_fenetre..plan=2

    il y a img_image..plan = 2 on force l'image à avoir le plan 2

    C'est ce qui me semble un peut bizarre mais je ne pense pas que le problème vient de là.

    Il n'y a pas de thread
    Joie et Partage

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    existe-t-il ce plan n°2 ?

    Nicolas

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 103
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par Nicolas_Jeanneau Voir le message
    Bonjour,

    existe-t-il ce plan n°2 ?

    Nicolas
    Oui ce plan existe.
    Joie et Partage

  6. #6
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Un truc bourrin qui peut aider, surtout si tu as un code assez long est de mettre des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    info("je suis avant le pour i")
    info("je suis avant le si .....")
    info("je suis avant le tantque.....")
    avant chaque bloc de code (avant une itération, avant une condition,...)

    puis une fois le bloc "cerné", en mettre entre chaque ligne de code.

    Edit : je viens de trouver cela :http://forum.pcsoft.fr/thread.awp?gr...&postid=170534

    Regarde le post d'Alex et suivant. Il y a plein de pistes différentes... et donc à vérifier
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  7. #7
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Bonjour,

    Une GPF c'est un plantage rattrapé non pas par WinDev mais par le système, donc :
    - Soit un bug interne de WinDev.
    - Soit un bug de votre appli que WinDev n'a pas intercepté à temps (vous lui avez dit de faire une bêtise et il l'a faite sans générer une erreur WLangage).

    En réalité le 2ème cas c'est aussi un bug de WinDev puisqu'il n'a pas signalé une erreur là où il aurait dû.

    Vous pouvez aussi avoir une fenêtre "corrompue", essayez d'enlever la fenêtre du projet, puis la remettre par un copier/coller de fenêtre (ne pas l'importer).

    Si vous arrivez à trouver comment reproduire cette GPF à tous les coups, envoyez un rapport de bug à PC Soft avec un projet de repro aussi simple que possible, si possible testé sous WD16.

  8. #8
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Bonjour,

    Je me permet de remonter ce sujet car j'ai le même soucis avec un code dans mon programme.

    Voici le code en question qui me déclenche cette GPF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SI HExécuteRequête(REQ_Planning, hRequêteDéfaut, DateVersJour(DateSys()), Gauche(HeureSys(), 4), Gauche(HeureSys(), 4)) ALORS
    				SI HLitPremier(REQ_Planning) ALORS
    					POUR TOUTE LIGNE DE TABLE_Zones
    						TABLE_Zones.COL_PS_Envoi = REQ_Planning.Texte_Rds_Ps
    						TABLE_Zones.COL_RT_Envoi = REQ_Planning.Texte_Rds_Rt
    					FIN
    				SINON
    					POUR TOUTE LIGNE DE TABLE_Zones
    						TABLE_Zones.COL_PS_Envoi = TABLE_Zones.COL_PS_Fin
    						TABLE_Zones.COL_RT_Envoi = TABLE_Zones.COL_RT_Fin
    					FIN
    				FIN
    			SINON
    				//Erreur(HErreurInfo())
    				POUR TOUTE LIGNE DE TABLE_Zones
    					TABLE_Zones.COL_PS_Envoi = TABLE_Zones.COL_PS_Fin
    					TABLE_Zones.COL_RT_Envoi = TABLE_Zones.COL_RT_Fin
    				FIN
    			FIN
    Mal codé ?

    J'ai plusieurs threads qui utilisent les données provenant de la table Table_Zones, çà viendrais de là ?

    Merci

  9. #9
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Peut-être. Il faudrait que tu mettes un sémaphore ou qqchose d'équivalent pour éviter que tu aies un accès concurent à la ressource.

    Tu peux essayer de voir plus précisément où est l'erreur en mettant des traces...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  10. #10
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Citation Envoyé par damien.c Voir le message
    J'ai plusieurs threads qui utilisent les données provenant de la table Table_Zones, çà viendrais de là ?

    Merci
    Bonjour,

    Accéder à des objets de l'IHM dans des threads secondaires est fortement déconseillé, car WinDev n'est pas réellement thread-safe de ce côté là. On va plutôt essayer de piloter le thread principal depuis les threads secondaires pour qu'il accède seul à l'IHM.

    Par ailleurs, "ça" ne prend pas d'accent, vous confondez avec l'adverbe de "çà et là". (on fait tous des fautes de frappe, mais ça fait plusieurs fois que je lis "çà")

  11. #11
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    bonjour,

    merci pour votre aide ! Et si j'utilise un tableau au lieu d'une table cela devrais être possible d'accéder aux données ?

  12. #12
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Et bien il faudrait en savoir un peu plus.
    Personnellement je ne fais pas confiance alors je synchronise tous les accès au tableau.
    De toute façon, imaginez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Thread 1 :
    POUR i = 1 _A_ TableauOccurrence(MonTableau)
        // Lecture d'un élément
    FIN
     
    // Thread 2 :
    // Suppression du 2ème élément, en plein milieu de l'exécution du thread 1
    TableauSupprime(MonTableau, 2)
    Vous imaginez bien que ça va planter. Mais cette fois ça ne sera pas une GPF mais une erreur WLangage disant "vous essayez d'accéder à l'élément 42 alors qu'il n'y a que 41 éléments".
    Donc il faut toujours un peu de synchro.
    Attention, par défaut WinDev synchronise toutes vos fonctions, mais une à une (en gros si vous appelez la même fonction depuis 2 threads, c'est en série), mais ça ne suffit évidemment pas. (cf. ThreadMode)

  13. #13
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    D'accord, je ne souhaite pas supprimer en tout cas mais seulement modifier le contenu d'un élément.

  14. #14
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Citation Envoyé par damien.c Voir le message
    D'accord, je ne souhaite pas supprimer en tout cas mais seulement modifier le contenu d'un élément.
    Personnellement je synchroniserais moi-même tous les accès, car derrière une opération en apparence simple peuvent se cacher des choses complexes et pas forcément thread safe. Rien dans la doc de PC Soft ne précise ce qui est sécurisé et ce qui ne l'est pas.
    Le plus simple serait d'écrire des fonctions d'accès au tableau synchronisées entre elles avec une même section critique. Ensuite vous utilisez ces fonctions depuis vos threads sans vous poser plus de questions.

    C'est un peu extrême, mais ça ôte tout doute.

  15. #15
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bien vu Hibernatus.

    J'utilise des timers et pour éviter ce genre de déconvenue, je mets un booléen (variable globale) à vrai dans la section critique. Ca donne un code du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Procedure MaSection()
    si bTravail alors retour
     
    bTravail = vrai
     
    // Traitements à effectuer
     
    bTravail = faux
    Le truc est qu'il faut faire attendre tes threads. Des boucles tantque, c'est pas forcément cool à gérer...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  16. #16
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Je ne vois pas vraiment comment synchroniser tout ça ...

  17. #17
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Commencez par là, si vous ne connaissez pas déjà : http://doc.pcsoft.fr/fr-FR/?3077001

  18. #18
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Merci,

    Mais enfaite, le code que je vous ai coller est dans le thread qui s’appelle "Titrage" (seul lui fais une modification dans la table) les autres threads ne font que lire le contenu d'une cellule de la table.

    Les sections critique sont quand même conseillé dans ce cas ? Car je n'ai pas plusieurs fois ce code... (je ne sais pas si je suis très clair :s)

  19. #19
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Tes autres threads ne doivent pas pouvoir lire quand tu écris.
    Ta section critique est l'écriture. Il faut que tu fasses attendre tes threads tant que ton thread principal n'est pas sorti de cette section
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  20. #20
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    Je ne pense pas que ce thread soit seul à modifier la table, vu que l'IHM tourne dans le thread principal, et l'utilisateur peut faire un tri, une modif (?) etc.
    Si la GPF est systématique, adressez-vous au support technique de PC Soft.
    (à propos, les timers sont synchrones, c'est des événements WM_TIMER, comme un vulgaire clic de souris ils sont traités quand vous rendez la main à WinDev)

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/02/2012, 11h20
  2. [Lieur Erreur] Fatal: Access violation. Link terminated.
    Par aiolia_aiolos dans le forum C++Builder
    Réponses: 8
    Dernier message: 29/07/2008, 12h25
  3. Réponses: 2
    Dernier message: 20/11/2007, 10h38
  4. Réponses: 2
    Dernier message: 19/04/2007, 14h30
  5. Réponses: 9
    Dernier message: 08/11/2005, 09h56

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