Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/11/2015, à 12:14

dva2tlse

[RESOLU mais kilékon] Pourquoi un "print" fait il tout planter ?

Bonjour, j'ai un programme en fortran que je développe pour mon boulot depuis pas mal de temps alors que ce n'est pas mon métier de base; mais j'ai déjà obtenu ici plusieurs pistes qui m'ont permis de surpasser d'autres écueils, donc j'y reviens.
Ce programme me fait des misères, donc je lui demande de nombreuses sorties intermédiaires pour essayer de comprendre ce qui ne va pas à chaque fois qu'une nouvelle erreur se présente; et c'est justement une de ces impressions intermédiaires qui patine aujourd'hui :
(Le programme s'appelle S comme essai, et il a comme arguments le nombre de threads sur lequel il doit s'exécuter, puis le nom du fichier de sortie, puis celui d'entrée)

Alors j'ai deux gamelles différentes; l'une en faisant ceci : (et l'autre plus loin)

$  2>&1 ./S 1 p2srfd04BAR el04BAR.inp
.
.. (sorties normales)
...
p2srfd:00 apres lecpch pour FAB, Z=0
p2srfd:00 K=1 IDelt=    1, EIDelt(IDelt)=30259813, IDpchN(EIDelt(IDelt))=  121
p2srfd:00 K=1 IDelt=    2, EIDelt(IDelt)=30259814, IDpchN(EIDelt(IDelt))=  122
p2srfd:00 K=1 IDelt=    3, EIDelt(IDelt)=30259815, IDpchN(EIDelt(IDelt))=  123
p2srfd:00 K=1 IDelt=    4, EIDelt(IDelt)=30259816, IDpchN(EIDelt(IDelt))=  124
At line 1402 of file /S/DATA/DVA/F90/BN/SS.f
Fortran runtime error: Expected INTEGER for item 12 in formatted transfer, got CHARACTER
(A,I2.2,  A,I1,  A,I5,  A,I1,  A,I1,  A,F7.2)
                                 ^
shSpch:00 DIR=0, IDpch=  121, K=1, Z=
$

---Ici, le format qui cause l'erreur en cours d'exécution est celui de l'instruction suivante, et c'est le "Z" qui déconne, alors que quelques lignes plus haut il avait bien été imprimé, avec la deuxième instruction "print" que je donne ici pour comparaison :

      print !    DIR    IDpch  K      Z      Spch(DIR, IDpch, K, Z) 
     +'(A,I2.2,  A,I1,  A,I5,  A,I1,  A,I1,  A,F7.2)', 
     +'shSpch:', TID, 
     +' DIR=', DIR, 
     +', IDpch=', IDpch, 
     +', K=', K, 
     +', Z=', Z, ! ici ligne 1402
     +', Spch(DIR, IDpch, K, Z)=', Spch(DIR, IDpch, K, Z) 

          print'(A,I2.2,  A,I1)', 'p2srfd:', TID, 
     +' apres lecpch pour FAB, Z=', Z  


---et j'obtiens une erreur un peu différente en faisant celà : (le fichier qui est redirigé vers l'entrée de gdb est donné plus loin)

$ 2>&1 gdb ./S<RUN04BAR|tee tmp04BAR
.
.. (sorties normales)
...
p2srfd:00 K=5, IDelt=    1, EIDelt(IDelt)=30259813, IDpchN(EIDelt(IDelt))=  121, Spch(0, IDpchN(EIDelt(IDelt)), K, 0)=   9.05
p2srfd:00 K=5, IDelt=    2, EIDelt(IDelt)=30259814, IDpchN(EIDelt(IDelt))=  122, Spch(0, IDpchN(EIDelt(IDelt)), K, 0)=  15.33
p2srfd:00 K=5, IDelt=    3
Program received signal SIGSEGV, Segmentation fault.
0x00002aaaaab455ca in ?? () from /usr/lib64/libgfortran.so.1
(gdb) #0  0x00002aaaaab455ca in ?? () from /usr/lib64/libgfortran.so.1
#1  0x00002aaaaab4584c in ?? () from /usr/lib64/libgfortran.so.1
#2  0x00002aaaaab41cd5 in ?? () from /usr/lib64/libgfortran.so.1
#3  0x000000000040e1f7 in shspch (dir=@0x7fffffffe4dc, idpch=@0x7fffffffe4c4, 
    k=@0x7fffffffe4cc, spch=0x7fffffffe49c, z=@0x1)
    at /S/DATA/DVA/F90/BN/SS.f:1401
#4  0x0000000000403c20 in MAIN__ () at /S/DATA/DVA/F90/BN/SS.f:302
#5  0x000000000041c45e in main ()
(gdb) A debugging session is active.

        Inferior 1 [process 22306] will be killed.

Quit anyway? (y or n) [answered Y; input not from terminal]
$

(le fichier qui est redirigé vers l'entrée de gdb est le suivant smile

$ cat RUN04BAR
run 1 p2srfd04BAR el04BAR.inp
bt
q
y
$

---Dans ce deuxième cas, ça plante en 1401, soit une ligne plus loin que précedemment et dans la même instruction "print", et je vois dans la sortie de gdb que l'adresse de la variable "Z" n'a pas le même format que les autres, j'ai "z=@0x1" au lieu d'un format en "truc=@0x7fffffffABCD" avec ABCD étant quatre chiffres hexadécimaux variables.

Bon, en fait ça a l'air d'être la même cause, c-à-d. le Z, mais pourquoi l'adresse de cette variable est elle présentée différemment des autres, et surtout pourquoi fait elle planter mon programme ?

Merci de me donner des idées de choses à chercher,
David

Dernière modification par dva2tlse (Le 04/12/2015, à 13:48)


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#2 Le 30/11/2015, à 13:49

dva2tlse

Re : [RESOLU mais kilékon] Pourquoi un "print" fait il tout planter ?

Bon, merci de m'avoir lu, mais ne vous souciez plus de ça; je suis nul, j'avais une liste d'arguments d'un sous programme qui ne correspondait pas avec le call !

Dernière modification par dva2tlse (Le 29/12/2015, à 15:05)


xubuntu 22.04 dans un PC assemblé
PS: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne