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 09/11/2015, à 14:25

dva2tlse

[RéSOLU tmp] élucider une segfault avec gdb en fortran openmp

Bonjour les gens du forum.
J'essaye depuis pas mal de temps d'utiliser openMP sur un programme en fortran. (MP=Multi Processing, mais ne fuyez pas, la vérité surgira même si vous ne connaissez pas)
En effet, le programme plante avec une segfault, et je n'arrive pas à savoir quelle variable ou quel tableau est mal indicé et l'envoie chercher des roses chez le voisin.
Comment faire alors pour que gdb m'indique le nom de la variable qui le fait planter ?
Où son adresse ainsi que celles de toutes les variables et tableaux du programme contenus en mémoire ?
Merci,
David

Dernière modification par dva2tlse (Le 30/11/2015, à 12:47)


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 09/11/2015, à 14:33

Braun

Re : [RéSOLU tmp] élucider une segfault avec gdb en fortran openmp

Bonjour,
La méthode universelle est de tester le programme petit morceau par petit morceau, évidemment c'est un peu long.
En Fortran tu devrais peut être te focaliser sur les indices qui risquent de pointer juste avant ou un pas trop loin dans le tableau.

Hors ligne

#3 Le 09/11/2015, à 14:50

dva2tlse

Re : [RéSOLU tmp] élucider une segfault avec gdb en fortran openmp

Merci, c'est évidemment ce que je fais, mais j'ai trop de variables à essayer; je voudrais que quand gdb détecte la segfault, il me dise que c'est telle ou telle variable héhop, ou qu'il me donne une adresse !

Dernière modification par dva2tlse (Le 09/11/2015, à 15:00)


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

#4 Le 09/11/2015, à 18:36

grigouille

Re : [RéSOLU tmp] élucider une segfault avec gdb en fortran openmp


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#5 Le 09/11/2015, à 19:19

dva2tlse

Re : [RéSOLU tmp] élucider une segfault avec gdb en fortran openmp

Oui, Valgrind ça doit être bien d'après plusieurs commentaires que j'ai vus à droite, à gauche, mais je ne sais pas l'utiliser; pourtant c'est installé et ça marche à mon boulot, mais déjà dans gdb je ne connais que bt=backtrace, alors là je ne connais rien du tout zéro; je l'ai juste démarré une fois pour vérifier, mais je ne sais rien faire avec, ni analyser les sorties.
Il me faudrait un Tuto balèze, ou un exemple de quelqu'un qui s'en est servi pour determiner laquelle de ses variables lui causait une segfault.
David


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

#6 Le 09/11/2015, à 21:39

grigouille

Re : [RéSOLU tmp] élucider une segfault avec gdb en fortran openmp


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#7 Le 09/11/2015, à 22:09

dva2tlse

Re : [RéSOLU tmp] élucider une segfault avec gdb en fortran openmp

OUAIS !!! C'est super, merci; j'espère que ça me donnera des trucs intéressants en fortran aussi, surtout que j'ai vu qu'il y avait un module pour le multithreading qui pourrait donc être intéressant avec openmp. Et en plus les exemples sont assez simples pour ne pas excéder mes maigres connaissances en C, donc merci bien, et à une prochaine fois peut-être, si jamais il y a des trucs particuliers en C que je ne connais pas, ou au contraire du fortran que je ne sais pas interpréter, je viendrai appeler à l'aide ici...
Merci encore,
David


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

#8 Le 10/11/2015, à 15:49

dva2tlse

Re : [RéSOLU tmp] élucider une segfault avec gdb en fortran openmp

Le Pb c'est que valgrind, c'est pour les petits nenfants qui font du code dans leur maternelle :

$ valgrind ./S  2 p2srfd04BAR_2 el04BAR.inp
valgrind: mmap(0x603000, 1066151936) failed in UME with error 22 (Invalid argument).
valgrind: this can be caused by executables with very large text, data or bss segments.

Je ne tire aucune fierté de ceci, je préfère même nettement avoir du code "petit", mais quand il y a des impératifs de production, certaines fonctionnalités sont "volumineuses" et point.
Pourtant j'ai du "ulimit -a"  à fond...

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 515285
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 515285
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

David (bien emm....é)


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

#9 Le 11/11/2015, à 20:19

grim7reaper

Re : [RéSOLU tmp] élucider une segfault avec gdb en fortran openmp

dva2tlse a écrit :

Le Pb c'est que valgrind, c'est pour les petits nenfants qui font du code dans leur maternelle

Ce genre de remarque est très malvenue…

Tu te permets d’être condescendant envers un logiciel développé par des gens plus que compétent (Julian Seward entre autres) et envers les utilisateurs.
Je te signale au passage que Valgrind peut être lancé sur de très gros logiciels (tel que Firefox, l’exemple parfait du logiciel développé par des « petits nenfants qui font du code dans leur maternelle »…).
Le problème est probablement dû au fait que ton code contient de gros tableaux statique (si tu fais un "size ton_binaire" on verra la taille de ton BSS) ce qui est souvent un signe de code mal branlé (surtout en C, en Fortran (ce qui est ton cas) c’est plus discutable).

Mais bon, c’est toujours mieux de rejeter la faute sur un outils tiers et de cracher sur ses utilisateurs plutôt que de se remettre en question…

Hors ligne

#10 Le 11/11/2015, à 20:42

dva2tlse

Re : [RéSOLU tmp] élucider une segfault avec gdb en fortran openmp

Bonjour grim7reaper,
je n'ai rien contre d'être considéré comme un petit nenfant moi-même, surtout que je ne sais pas utiliser valgrind sur du code probablement trop gros.
David


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

#11 Le 11/11/2015, à 21:10

grim7reaper

Re : [RéSOLU tmp] élucider une segfault avec gdb en fortran openmp

Comme tu sembles penser que c’est un problème d’index en dehors des limites, as tu essayé de compiler ton code avec -fcheck=bounds (ou -fbounds-check si ton gfortran est un peu plus vieux) ?

Hors ligne

#12 Le 11/11/2015, à 23:29

claudius01

Re : [RéSOLU tmp] élucider une segfault avec gdb en fortran openmp

Bonsoir,

Sujet et propositions déjà évoqués avec toi dva2tlse
cf. [RéSOLU] erreur simpliste lors de la lecture d'un entier sur un car. (post #17, #25 et #26 en autres ;-)

Cordialement, A+

Hors ligne

#13 Le 12/11/2015, à 18:21

dva2tlse

Re : [RéSOLU tmp] élucider une segfault avec gdb en fortran openmp

Ok et merci Claudius et grim7reaper; mais je ne vais pas me servir de vos tuyaux pour l'instant, car ça remarche; enfin, dans mon code j'ai remplacé tous les sous-programmes par des appels vides qui ne font rien à part un petit message répétant tous les arguments; parce que pour bien tout vérificationner, j'ai repris la structure de tous les appels avec tous les arguments, et ça se passe bien.
Donc maintenant je vais progressivement re-remplir les sous-programmes, jusqu'à trouver celui qui faisait tout planter, et d'ici quelques jours, je pourrais peut-être revenir annoncer une bonne nouvelle. (enfin surtout pour moi)
David

EDIT le vendredi 13 novembre 2015 vers 16h : Bon, alors je suis encore assez loin d'avoir tout remis en place, mais comme l'a suggéré Claudius en se rappellant bien de mon cas, l'option -fbounds-check m'a de nouveau permis de détecter plusieurs erreurs dont celle qui faisait tout planter, mais une autre est importante aussi et m'occupe pour l'instant. Mais ça avance, et merci de m'avoir débloqué de façon qui me semble constructive.
David
PS: Vu que c'est la deuxième fois que ça m'arrive (voire plus), je dois être vraiment bien nul avec ces indices de tableaux et il faudra que je m'en méfie à l'avenir.

Dernière modification par dva2tlse (Le 13/11/2015, à 17:20)


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