Salut à tous,
J'ai un problème de violation d'accès dans un code assez gros (10 000 lignes).
La situation est la suivante :
- Je n'ai aucun warning ou erreur à la compilation, que ce soit gfortran ou Intel Fortran
- Avec gfortran, je n'arrive pas à reproduire la violation d'accès
- Avec Intel Fortran (environnement Visual Studio qui me sert de debugger au besoin), je n'arrive pas à reproduire la violation d'accès lorsque les optimisations sont désactivées. Dès que je les active, paf, violation d'accès, mais du coup la ligne d'erreur indiquée est plus ou moins arbitraire (les infos de debug doivent plus vraiment être utilisables)
Je peux activer un certain nombre de checks de runtime, mais par exemple, je ne peux pas activer le check stack frame (qui désactive les optis donc plus d'access violation). Les autres checks eux ne relèvent pas d'erreur
Du coup je ne sais pas comment m'y prendre pour trouver la source de l'erreur.
Les seules infos que j'ai, c'est donc ce qu'il dit, à savoir
"Exception non générée à 0x0030264c dans machin.exe : 0xC0000005 : Violation d'accès lors de l'écriture à l'emplacement 0x38f07b1a."
La ligne d'arrêt du curseur étant le début d'une entry (entry PRSADI de la subroutine PRSAD).
Quand je regarde le code machine, que je demande l'emplacement 0x0030264c, il m'affiche :
et il remplace l'adresse "0x0030264c" dans le champ de recherche par "PRSAD(void)"
Code : Sélectionner tout - Visualiser dans une fenêtre à part 0030264C call TXS_AXS(2C31D0H)
Pour l'emplacement 0x38f07b1a, il m'affiche :
Sans remplacer l'adresse dans le champ de recherche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 38F07B1A ???
A noter :
- TXS_AXS est une toute petite routine géométrique (elle prend comme arguments une matrice 3x3 et un vecteur 3), qui est appelée à de nombreux endroits dans le code. Il n'y a aucune erreur ou risque dans celle-ci, elle est vraiment très courte (~10 lignes) et tout y est bien déclaré. En revanche peut-être bien sûr qu'un des appels à cette routine contient une erreur ? Mais je les ai parcourus, je n'ai pas l'impression...
- TXS_AXS n'est pas appelée dans PRSAD (aucune des ENTRY)
- PRSAD elle-même semble ok (pas de variable en argument d'une entry qui serait utilisée par une autre entry sans être aussi un argument, tableaux déclarés, ...)
Si vous avez des idées, je suis preneur...
Merci
Partager