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
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