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

Fortran Discussion :

segfault introuvable dans mon code


Sujet :

Fortran

  1. #1
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut segfault introuvable dans mon code
    J'ai un programme qui tourne et envoie des sorties de contrôle vers stdout; elles ne s'affichent qu'avec un certain retard par rapport au point d'exécution auquel en est réellement le programme.
    Mais j'ai l'impression que si une erreur intervient, elle est signalée immédiatement, sans attendre que les sorties déjà générées mais pas encore affichées ne le soient. Ce qui fait me semble-t'il, que la segfault signalée se retrouve à l'écran au beau milieu de sorties parfaitement normales générées préalablement, et qui étaient en train d'arriver à l'affichage au moment ou s'est produit la segfault.
    Est-ce réaliste comme comportement ?
    Y aurait il un moyen de synchroniser l'affichage normal et l'affichage des problèmes.
    Je m'aperçois en écrivant ceci, qu'on pourrait imaginer que ça voudrait dire que stdout est bufferisé alors que stderr est direct.
    Comment puis je faire pour trouver ma segfault (j'utilise déjà gdb, qui me dit à quelle ligne ça plante, mais ce message est affiché au milieu de sorties normales)
    Merci,
    David
    P.S. 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 causer avant.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 152
    Points : 191
    Points
    191
    Par défaut
    Salut,

    Effectivement, les sorties sont en général bufferisées.

    Ton problème me fait penser à un problème de code parallèle. Si tel est le cas, tu peux avoir un thread qui plante (le seg fault) alors que les autres envoient leur sortie...
    Si tu es en parallèle, ne lances le processus qu'avec un seul thread.

    Sinon, tu peux toujours écrire ta sortie dans un fichier (en linux cela donne ./mon_prog > TMP_OUT). Il te sera plus facil de retrouver la ligne de bug à l'aide de gdb.

    En espérant t'avoir aidé,

    Marlan

  3. #3
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut Je ne crois pas que ce soit aussi simple que ça.
    Je ne crois pas que ce soit si simple que ça. Je redirige déjà les sorties vers un fichier tmp pour pouvoir relire attentivement les assez nombreuses sorties de contrôle que j'ai ajoutées pour essayer de localiser le problème, et jusqu'à présent ça n'a pas suffi.
    Il semblerait que la solution se situe "en amont" des écritures que l'on peut enregistrer tant qu'on veut; on m'a proposé sur le forum d'ubuntu (j'ai un xubuntu chez moi, alors que le problème se pose à mon boulot sur une Red Hat à 19 coeurs, mais le principe reste le même) ...donc, on m'a proposé de rediriger stderr sur stdout avant de lancer le programme :
    $ 2>&1 "programme_à_exécuter"
    Je vérifierai ça demain.
    David
    P.S. 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 causer avant.

  4. #4
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut RéSOLU, YOUPI.
    bon hébin ayé; je n'ai pas encore tout qui marche comme sur des roulettes, mais je sais ce qui patine; une initialisation de variable que je suspectais de temps à autres sans en avoir de preuve absolue, et maintenant je sais avec certitude que cette variable sert d'adresse et amenait une gamelle quand elle n'était pas encore définie.
    P.S. 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 causer avant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA][Débutant][export]erreurs dans mon code?
    Par Christophe93250 dans le forum Access
    Réponses: 4
    Dernier message: 06/01/2006, 19h52
  2. Projet VB v6 : utilisation de requête SQL dans mon code
    Par MITCH31 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 27/10/2005, 15h02
  3. Réponses: 10
    Dernier message: 06/10/2005, 22h25
  4. Réponses: 1
    Dernier message: 21/02/2005, 12h40
  5. [langage] algo de bissection dans mon code
    Par killy dans le forum Langage
    Réponses: 5
    Dernier message: 19/01/2004, 18h35

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