| Violation d'accès. | |
|
+6silverman papydall JL35 Jicehel Jean Claude Pedro 10 participants |
|
Auteur | Message |
---|
Pedro
Nombre de messages : 1596 Date d'inscription : 19/01/2014
| Sujet: Violation d'accès. Jeu 17 Mar 2016 - 10:19 | |
| Bonjour à tous.
L'un d'entre vous pourrait-il m'expliquer la raison pour laquelle Panoramic affiche régulièrement le message d'erreur suivant:
Violation d'accès à l'adresse .... dans le module Panoramic.exe, à l'adresse ....
Car il me semble difficile, voire même impossible, de corriger cette erreur dans mon code !
Merci d'avance. | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Violation d'accès. Jeu 17 Mar 2016 - 13:23 | |
| @Pedro, Te donner une explication, j'en suis incapable. Par contre, ce que je peux dire avec certitude c'est qu'une double virgule dans les déclarations de variables provoque systématiquement cette erreur. Ex: DIM a$,,b$ là c'est certain ça plante. Comme dit Syverman, c'est souvent dû à un Copier/Coller/Merder Tu peux déjà pister ,, avec la fonction de recherche de l'éditeur que tu utilises... A+ | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Violation d'accès. Jeu 17 Mar 2016 - 13:42 | |
| oui ou des : glissés en fin de ligne par exemple et quelques trucs du genre | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Violation d'accès. Jeu 17 Mar 2016 - 13:59 | |
| Ça serait bien de répertorier tous les cas, parce que c'est une erreur assez déroutante et enquiquinante, comme toutes celles où on n'a pas de numéro de ligne... | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Violation d'accès. Jeu 17 Mar 2016 - 14:19 | |
| - Code:
-
' dim , : ' <==== une virgule seule : violation d'accès dim a, : ' <==== OK malgé la virgule qui n'a rien à faire ici ! ' dim x,,y : ' <==== deux virgules (ou plus) qui se suivent : violation d'accès a = 10 ::: : ' <==== OK pour Plusieurs deux-points, mais un seul deux-points ERREUR
| |
|
| |
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Violation d'accès. Jeu 17 Mar 2016 - 16:29 | |
| l''access violation' est un peu mystique, on y est tous confronté, mais il est difficile d'en trouver la cause. J'en ai eu plein avec la commande 'dll_call' car j'apprends à fabriquer des dlls et selon moi, il y a au moins 2 sortes de violation d'accès dû à: 1) une protection interne de panoramic, cad que dans ton source une commande a essayé d'écrire dans une zone mémoire protégé (ex.: poke 1,0, ou bien result%=dll_callx(...) avec des paramètres incorrect) 2) un plantage du module panoramic, la tu obtiens un message du style 'debug:panoramic.exe erreur d'application'(ex.:result%=dll_callx(...) pour accéder à des ressources internes, et là, panoramic n'a pas aimé) Je n'ai aucune info là-dessus, ce n'est qu'un ressenti personnel, à force d'utiliser panoramic. Le 2) est très rare et mon pano_debug est absolument inefficace dans ce cas, c'est la difficulté principale à laquelle je me heurte. Pour corriger cette erreur, il y a la commande 'trace_on' qui aide bien, mais il faut savoir que dans le cas d'un 'access violation', il faut prendre l'avant dernier numéro de ligne dans le fichier de trace et ajouter 3(ou 4) pour obtenir le numéro de la ligne fautive. | |
|
| |
Pedro
Nombre de messages : 1596 Date d'inscription : 19/01/2014
| Sujet: Violation d'accès. Jeu 17 Mar 2016 - 17:47 | |
| Bonjour.
Là, je commence vraiment à en avoir par-dessus la tête des Access Violation à répétition, qui s'affichent de manière aléatoire. De plus, c'est une erreur impossible à corriger !
Si Jack n'intervient pas sur ce sujet, je laisse tomber définitivement Panoramic, et je passe à Purebasic, pour lequel je ne rencontre aucun problème de ce genre à ce jour. | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Violation d'accès. Jeu 17 Mar 2016 - 18:50 | |
| Mon expérience avec la programmation m’a appris que dans au moins 90% des cas, l’erreur se trouve entre le clavier et la chaise ! Alors, n’abandonne pas, ne migre pas vers PureBasic. Revois ton code et surtout les éventuels appels aux DLLs.
J’appuie fortement ta demande d’intervention de Jack. Hé Jack, coucou ! | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Violation d'accès. Jeu 17 Mar 2016 - 20:16 | |
| - JL35 a écrit:
- Ça serait bien de répertorier tous les cas, parce que c'est une erreur assez déroutante et enquiquinante, comme toutes celles où on n'a pas de numéro de ligne...
Je suis du même avis que JL35, En signalant une cause vérifiée, on aide le programmeur, et cela permet à Jack de prévoir certaines situations pour le débogage effectué par l'éditeur Panoramic (Comme l'histoire des 2 virgules dans une ligne DIM). Ensuite je dois admettre que ce n'est pas toujours facile de savoir pourquoi ce message intervient, mais là je rejoins Papydall: "c'est entre la chaise et le clavier". A+ | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Violation d'accès. Jeu 17 Mar 2016 - 20:27 | |
| Bonsoir Jean Claude Je parlais évidemment de répertorier tous les cas dont on a trouvé la cause, genre ':' en bout de ligne ou ',,' dans les DIM (les exemples de papydall), à force on finirait peut-être par en faire à peu près le tour, et ça éviterait de s'arracher les cheveux (ou ce qu'il en reste) pour les cas les plus courants. Et je suis d'accord pour dire que c'est probablement toujours une erreur de programmation, dommage qu'elle soit signalée de manière aussi vague. | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 18 Mar 2016 - 6:36 | |
| @ Silverman, Il est où ton Pano_debug ? Peut être me serait il utile ?... | |
|
| |
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Violation d'accès. Ven 18 Mar 2016 - 8:35 | |
| - Citation :
- Je parlais évidemment de répertorier tous les cas dont on a trouvé la cause
Je pense qu'il serait surtout plus judicieux de localiser l'erreur sur la ligne. Ensuite il sera plus facile de la retrouver. Dans tous les cas, c'est vrai qu'il s'agit d'un manque de visibilité crucial dans Panoramic. Ces histoires d'erreurs non localisées non prennent parfois beaucoup de temps ! Jack si tu nous entendant... | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Violation d'accès. Ven 18 Mar 2016 - 11:24 | |
| Dans mon idée, c'était bien de répertorier les cas trouvés par les programmeurs, empiriquement, faute d'autre moyen. La localisation par numéro de ligne ce serait évidemment l'idéal, mais ça c'est du ressort de Jack. Peut-être... | |
|
| |
Invité Invité
| Sujet: Re: Violation d'accès. Ven 18 Mar 2016 - 13:28 | |
| Depuis quelque temps, je refais un débogueur pour Panoramic. Celui-ci est plutôt complexe, et j'évite de rentrer dans les détails. Je me suis dit qu'il était possible de reprendre quelques lignes, pour résoudre ce problème de lignes. J'ai fait un contrôle rapide et apparemment il n'y a pas de problème. Dans le programme à testé, il faut mettre au départ les lignes suivantes: - Code:
-
clipboard_string_copy "C:\PANO\chemin du programme\Nom du programme.bas" chain "c:\PANO\temp\ligne_erreur.bas" : ' Y mettre le chemin et le nom du programme de contrôle et le programme : "ligne_erreur.bas" - Code:
-
' à sauvegarder et reprendre le chemin avec le nom du programme pour son propre programme (cosmos70) dim f_source$ ,f_trace$, dim_prg$(100) dim a%,a$
f_source$ = clipboard_string_paste$ :' :' fichier, non dir !! f_trace$ = file_extract_path$(f_source$) dir_change f_trace$ dlist 1 : file_load 1,f_source$ dlist 2 if count(1) > 0 for a%=1 to count(1) a$=item_read$(1,a%) if trim$(a$)="" item_add 2,"" else item_add 2,"caption 0,"+str$(a%)+":"+a$ end_if next a% end_if file_save 2,"copie_prg_avec_ligne.bas" chain "copie_prg_avec_ligne.bas" Je pense que vous avez compris comment cela fonctionne. Vous chainez avec ce programme, donc il faut y mettre le nom de celui-ci dans le programme à contrôler. |
|
| |
Invité Invité
| Sujet: Re: Violation d'accès. Ven 18 Mar 2016 - 17:30 | |
| Je ne suis pas sure que vous en ayez compris le principe. Aujourd'hui je coule du béton, et j'ai fait ce programme pendant mon déjeuner, et je n'avais pas le temps.
Le programme plus haut ajoute un numéro de ligne dans le code source, avant toute instruction. Si un problème intervient, il suffit de regarder dans la barre de la fenêtre le numéro de ligne, et c'est cette ligne qui a ce problème.
Donc en ajoutant les deux lignes dans un programme: clipboard_string_copy chemin du programme en teste, et chain nom du programme contrôle, cela a pour effet de faire un second source du programme qui a les numéro de ligne devant chaque ligne. Ensuite le programme qui a récupéré l'adresse de votre programme, lance ce dernier.
A adapter pour le chemin, et peut-être pour le caption, le n° de ligne peut-être à un autre endroit.
Bon, je retourne au boulot! |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Violation d'accès. Ven 18 Mar 2016 - 18:21 | |
| Là je comprends mieux, et en effet c'est astucieux, au moment de l'arrêt il n'y a plus qu'à lire le numéro de ligne fautif dans le caption 0. Intéressant, et à noter, pour les erreurs sans numéro de ligne !
Tu peux retourner à ton béton la tête haute ! | |
|
| |
Jack Admin
Nombre de messages : 2395 Date d'inscription : 28/05/2007
| Sujet: Re: Violation d'accès. Ven 18 Mar 2016 - 18:44 | |
| Je pense qu'il est possible de capturer un événement (en fait une "exception") qui se déclenche lors d'un "Access Violation" ou lors d'une autre erreur intempestive. A partir de là, afficher le numéro de la ligne qui a déclenché l'erreur sera très simple.
Laissez-moi quelques jours de réflexion. Je vous tiendrai au courant. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
|
| |
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Violation d'accès. Ven 18 Mar 2016 - 19:18 | |
| Bonsoir Jack ! Merci de bien vouloir te pencher sur ce problème. Il est vrai que certains messages d'erreurs sont très évasifs et difficiles a localiser dans des grands programmes. C'est vrai que l'identification d'une ligne reste le meilleur moyen de résoudre un bug. Encore merci pour ta réactivité. | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Violation d'accès. Ven 18 Mar 2016 - 20:32 | |
| +1, ce serait parfait intégré dans Panoramic ! Merci Jack de t'y intéresser.
| |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Violation d'accès. Sam 19 Mar 2016 - 16:14 | |
| En attendant l'implémentation par Jack du système de localisation des erreurs ci-dessus, j'ai repris la méthode de cosmos70, qui consiste à afficher en permanence dans le caption 0 le numéro de la ligne en cours d'exécution, pour savoir où on en est au moment de l'erreur: - Code:
-
LABEL Chp,Info DIM r$,fr$,i%,a$,c$,q$,panedi$,panexe$ r$ = "C:\PANORAMIC": ' Répertoire des sources Panoramic panedi$ = "C:\PROGRA~2\PANORA~1\PANORA~1.EXE": ' Panoramic_Editor panexe$ = "C:\PROGRA~2\PANORA~1\PANORA~2.EXE": ' Panoramic.exe fr$ = r$+"Debug_tmp.bas": ' Fichieer source de manoeuvre (créé) q$ = CHR$(34) WIDTH 0,230: HEIGHT 0,SCREEN_Y-40 BORDER_SMALL 0: CAPTION 0, "- DEBUG -" ALPHA 8: TOP 8,2: FONT_SIZE 8,10: FONT_BOLD 8: CAPTION 8,"Clic le progr. à debugger " COLOR 8,255,255,128 BUTTON 9: WIDTH 9,30: LEFT 9,WIDTH(0)-50: HEIGHT 9,22: CAPTION 9,"?" FONT_BOLD 9: FONT_SIZE 9,10: ON_CLICK 9,Info CONTAINER_OPTION 10: TOP 10,21: WIDTH 10,WIDTH(0)-20: HEIGHT 10,30 CAPTION 10,"Exécuter dans:": COLOR 10,200,255,255 OPTION 11: PARENT 11,10: TOP 11,13: LEFT 11,3: CAPTION 11,"Panoramic_Editor" OPTION 12: PARENT 12,10: TOP 12,TOP(11): LEFT 12,115: CAPTION 12,"Panoramic.exe" MARK_ON 11 LIST 1: TOP 1,50: WIDTH 1,210: HEIGHT 1,HEIGHT(0)-90: FONT_NAME 1,"Consolas" ON_CLICK 1,Chp MEMO 2: HIDE 2 DLIST 4 DLIST 5 EXECUTE_WAIT "Cmd.exe /c DIR /B "+r$+"*.bas | clip" CLIPBOARD_PASTE 2 FOR i% = 1 TO COUNT(2): ITEM_ADD 1,ITEM_READ$(2,i%): NEXT i% END
Chp: FILE_LOAD 4,r$+ITEM_INDEX$(1) FOR i% = 1 TO COUNT(4) ITEM_ADD 5," Caption 0,"+q$+"Ligne: "+STR$(i%)+" *** debug ***"+q$ ITEM_ADD 5,ITEM_READ$(4,i%) NEXT i% FILE_SAVE 5,fr$ IF CHECKED(11) = 1 EXECUTE panedi$+" "+fr$: ' exécution dans Panoramic_Editor ELSE EXECUTE panexe$+" "+fr$: ' exécution dans Panoramic.exe END_IF TERMINATE
Info: c$ = CHR$(10) a$="Débogage d'un programme dont l'origine de l'erreur n'est pas localisée."+c$ a$=a$+" (méthode cosmos70)"+c$+c$ a$=a$+"Ce module intercale entre toutes les lignes du programme à tester une ligne"+c$ a$=a$+q$+"CAPTION 0 "+q$+" + n° de la ligne courante, et crée un nouveau fichier: Debug_tmp.bas"+c$ a$=a$+"(dont le nombre de lignes est donc le double de celui de l'original)"+c$+c$
a$=a$+"C'est ce nouveau fichier/programme qui sera exécuté, soit dans Panoramic_Editor,"+c$ a$=a$+"soit dans Panoramic.exe (choisi préalablement)."+c$+c$ a$=a$+"Usage:"+c$ a$=a$+"1) Choisir d'abord le programme d'exécution (Panoramic_Editor ou Panoramic.exe)"+c$ a$=a$+"2) Cliquer dans la liste des programmes le source (.bas) à tester."+c$+c$ a$=a$+"Quand le programme part en erreur, le numéro de la ligne où il s'est arrêté est"+c$ a$=a$+"affiché dans le caption du Form 0." MESSAGE a$ RETURN Il faut renseigner les 3 variables en tête: r$: chemin des sources Panoramicpanedi$: chemin de Panoramic_Editor.exepanexe$: chemin de Panoramic.exeVoir l'aide succincte (bouton '?') | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Violation d'accès. Sam 19 Mar 2016 - 18:19 | |
| Merci JL35 pour le partage. C'est bien pratique et ça peut rendre service. | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Violation d'accès. Sam 19 Mar 2016 - 18:30 | |
| Pas de quoi papydall, et je répète que l'idée (intéressante il me semble) est de cosmos70. C'est à expérimenter (pour le moment je ne peux pas, je ne fais pas d'erreur ). | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Violation d'accès. Sam 19 Mar 2016 - 18:46 | |
| - JL35 a écrit:
- Pas de quoi papydall, et je répète que l'idée (intéressante il me semble) est de cosmos70.
C'est à expérimenter (pour le moment je ne peux pas, je ne fais pas d'erreur ).
… Tu ne fais d’erreur ! Moi aussi, vaniteux ! Bon j’ai testé avec un petit code volontairement buggé et il m’a indiqué la ligne incriminée. | |
|
| |
Invité Invité
| Sujet: Re: Violation d'accès. Sam 19 Mar 2016 - 19:23 | |
| Bonsoir, Le problème avec Chain, ou panoramic.exe, est que si il y a des #include, ça ne marche pas. Dans mon programme (celui que je fais, et non celui que j'ai publié ici), le problème est pris en compte. Lorsque je lis une ligne qui possède #include, je lis cette partie dans un autre list, pour le réinsérer dans le list principal. Celà recompose le programme. Mais lors des teste que j'ai fait dans mon programme principal avec chain, j'ai constaté que j'avais des erreurs avec des nouvelles commandes, comme show_all je crois. Alors je ne sais pas si j'ai la dernière version de Panoramic.exe, ou si celle-ci a été mis à jour par Jack. Sur son site, panoramic.exe dans de 2013! Peut-être que c'est normal. Plus le temps, je quitte |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Violation d'accès. Sam 19 Mar 2016 - 19:52 | |
| L'avantage dans ce que j'ai mis c'est qu'on n'a pas à bricoler le programme à tester pour ajouter des chain ou autres. Le bricolage, c'est l'utilitaire qui le fait de manière transparente pour créer un fichier temporaire (celui qui sera exécuté), et c'est sans conséquence sur le source d'origine qui reste inchangé. La seule contrainte c'est qu'il faut que le source à tester soit déjà enregistré en .bas.
Maintenant, c'est à voir si ça couvre tous les cas... sans doute pas (je pense aux erreurs dues à des timers par exemple), mais c'est à expérimenter. | |
|
| |
Contenu sponsorisé
| Sujet: Re: Violation d'accès. | |
| |
|
| |
| Violation d'accès. | |
|