Bonsoir :)
Ben ma question est simple, comme rediriger le flux cerr vers un fichier ??
Merci d'avance.
Version imprimable
Bonsoir :)
Ben ma question est simple, comme rediriger le flux cerr vers un fichier ??
Merci d'avance.
Si tu ne veux pas le faire dans ton programme, tu peux aussi utiliser une redirection lorsque tu lances ton executable.Code:
1
2
3
4
5
6
7
8
9
10
11
12 #include <iostream> #include <fstream> int main() { std::ofstream Out("Error.txt"); std::cerr.rdbuf(Out.rdbuf()); std::cerr << "Test"; return 0; }
Si la fichier n'existe pas, est-ce que ça créer le fichier ?? Parce que dans mon programme opengl, j'ai fais un copier-coller de ton code, mais je ne vois pas de Error.txt dans le dossier de mon executable...Citation:
Envoyé par Laurent Gomila
Sinon, qu'est-ce que tu entends pas "redirection au lancement de mon executable" ?
EDIT: En fait ça marche, mais j'aurais besoin de ça pour afficher les plantages... et ça ne fonctionne pas quand ça plante :(
Oui, ça va créer le fichier. Vérifie le répertoire de travail, peut-être est-il différent du répertoire de ton exécutable.Citation:
Si la fichier n'existe pas, est-ce que ça créer le fichier ?? Parce que dans mon programme opengl, j'ai fais un copier-coller de ton code, mais je ne vois pas de Error.txt dans le dossier de mon executable...
Ca dépend du système, mais globalement c'est un truc de ce genre (en ligne de commande) :Citation:
Sinon, qu'est-ce que tu entends pas "redirection au lancement de mon executable" ?
Par contre, me rappelle plus si 2 est bien le numéro correspondant à cerr.Code:Programme.exe 2> out.txt
Le truc bizarre, c'est que quand ça plante dans le constructeur d'une classe (classe OGLFT, dans la fonction FT_Freetype_Version ou un truc du genre), ça n'écrit rien dans error.txt... :-/
Essaye de placer un flush, avec std::flush ou std::endl;
Excuse-moi mais je ne vois pas du tout ce qu'est un flush... :oops:Citation:
Envoyé par Laurent Gomila
le flush c'est pour forcer le flux à aller dans ton fichier (car ca se fait pas si le flux n'a pas atteind une certaine taille ou si ya pas de retour à la ligne), ça vide la zone tampon.
Et comment je fais ça ?
EDIT : Meme si je fais un endl, quand ça plante sur le destructeur, je ne vois rien sur error.txt...:?
Est-ce que tu envoies du texte sur cerr au moins ?
Oui oui !!, voila le code :
Code:
1
2
3 std::ofstream Out("Error.txt"); std::cerr.rdbuf(Out.rdbuf()); cerr << "ceci est un test1" << endl;
Le petit programme que je t'ai donné plus haut te donne quel résultat si tu le compiles et l'exécutes tel quel ?
Ca fonctionne tant que ça ne plante pas...
Ce n'est pas parce que le flux cerr n'est pas commun à la bibliothèque et au programme ?
En vrac...
Ca ne plante pas par hasard dans un constructeur de variable globale appelé avant main?
Essaye de faire
pour contrôler le buffering.Code:Out << std::unitbuf;
Il vaudrait mieux remettre le streambuf de cerr avant de sortir de main pour avoir les sorties éventuellement faites dans les destructeurs de variables globales.
Ca plante dans le constructeur d'une classe pour afficher du texte sous Opengl à l'aider de Freetype 2. Ca plante sur la fonction FT_Library_Version.Citation:
Envoyé par Jean-Marc.Bourguet
Sinon, comment remettre le streambuf de cerr ?