Ça se passe sous Linux Ubuntu HH, avec gcc et gdb. [...]
Je précise que le même fichier pose les mêmes problèmes sous Windows compilé
avec Mingw (gcc pour Windows). Par contre, sous Visual, le débogueur fonctionne.
Mes sources sont en UTF-8.
Plus précisément, voici les sources et les symptomes (copies de console) :
-------- a_deboguerOUI.c --------------------------------------
/* int f(int b) { } */ int main(void) { return 0; }}
-------- a_deboguerNON.c --------------------------------------
/* int f(int b) { } */ int main(void) { return 0; }
---------------------------------------------------------------
ceci est le source dans un éditeur hexa :
0000:0000 2f 2a 0d 69 6e 74 20 66 28 69 6e 74 20 62 29 0d /*.int f(int b).
0000:0010 7b 0d 20 0d 7d 0d 2a 2f 0d 69 6e 74 20 6d 61 69 {. .}.*/.int mai
0000:0020 6e 28 76 6f 69 64 29 0d 7b 20 0d 20 20 20 20 72 n(void).{ . r
0000:0030 65 74 75 72 6e 20 30 3b 0d 7d 0d 0a eturn 0;.}..
Le code hexa du 2ème source :
0000:0000 2f 2a 0d 69 6e 74 20 66 28 69 6e 74 20 62 29 0d /*.int f(int b).
0000:0010 7b 0d 20 0d 7d 0d 2a 2f 0d 69 6e 74 20 6d 61 69 {. .}.*/.int mai
0000:0020 6e 28 76 6f 69 64 29 0d 7b 20 0d 0d 0d 20 20 20 n(void).{ ...
0000:0030 20 72 65 74 75 72 6e 20 30 3b 0d 7d 0d 0a return 0;.}..
Ça se passe sous Linux Ubuntu HH, avec gcc et gdb. [...]
Je précise que le même fichier pose les mêmes problèmes sous Windows compilé
avec Mingw (gcc pour Windows). Par contre, sous Visual, le débogueur fonctionne.
Mes sources sont en UTF-8.
Plus précisément, voici les sources et les symptomes (copies de console) :
-------- a_deboguerOUI.c --------------------------------------
/* int f(int b) { } */ int main(void) { return 0; }}
-------- a_deboguerNON.c --------------------------------------
/* int f(int b) { } */ int main(void) { return 0; }
---------------------------------------------------------------
ceci est le source dans un éditeur hexa :
0000:0000 2f 2a 0d 69 6e 74 20 66 28 69 6e 74 20 62 29 0d /*.int f(int b).
0000:0010 7b 0d 20 0d 7d 0d 2a 2f 0d 69 6e 74 20 6d 61 69 {. .}.*/.int mai
0000:0020 6e 28 76 6f 69 64 29 0d 7b 20 0d 20 20 20 20 72 n(void).{ . r
0000:0030 65 74 75 72 6e 20 30 3b 0d 7d 0d 0a eturn 0;.}..
Le code hexa du 2ème source :
0000:0000 2f 2a 0d 69 6e 74 20 66 28 69 6e 74 20 62 29 0d /*.int f(int b).
0000:0010 7b 0d 20 0d 7d 0d 2a 2f 0d 69 6e 74 20 6d 61 69 {. .}.*/.int mai
0000:0020 6e 28 76 6f 69 64 29 0d 7b 20 0d 0d 0d 20 20 20 n(void).{ ...
0000:0030 20 72 65 74 75 72 6e 20 30 3b 0d 7d 0d 0a return 0;.}..
Ça se passe sous Linux Ubuntu HH, avec gcc et gdb. [...]
Je précise que le même fichier pose les mêmes problèmes sous Windows compilé
avec Mingw (gcc pour Windows). Par contre, sous Visual, le débogueur fonctionne.
Mes sources sont en UTF-8.
Plus précisément, voici les sources et les symptomes (copies de console) :
-------- a_deboguerOUI.c --------------------------------------
/* int f(int b) { } */ int main(void) { return 0; }}
-------- a_deboguerNON.c --------------------------------------
/* int f(int b) { } */ int main(void) { return 0; }
---------------------------------------------------------------
ceci est le source dans un éditeur hexa :
0000:0000 2f 2a 0d 69 6e 74 20 66 28 69 6e 74 20 62 29 0d /*.int f(int b).
0000:0010 7b 0d 20 0d 7d 0d 2a 2f 0d 69 6e 74 20 6d 61 69 {. .}.*/.int mai
0000:0020 6e 28 76 6f 69 64 29 0d 7b 20 0d 20 20 20 20 72 n(void).{ . r
0000:0030 65 74 75 72 6e 20 30 3b 0d 7d 0d 0a eturn 0;.}..
Le code hexa du 2ème source :
0000:0000 2f 2a 0d 69 6e 74 20 66 28 69 6e 74 20 62 29 0d /*.int f(int b).
0000:0010 7b 0d 20 0d 7d 0d 2a 2f 0d 69 6e 74 20 6d 61 69 {. .}.*/.int mai
0000:0020 6e 28 76 6f 69 64 29 0d 7b 20 0d 0d 0d 20 20 20 n(void).{ ...
0000:0030 20 72 65 74 75 72 6e 20 30 3b 0d 7d 0d 0a return 0;.}..
Antoine Leca a écrit :Le 27/02/2009 13:27, candide écrivit :Donc, à vue de nez un problème lié à un outil en particulier,
probablement GDB.
Je suis hors charte tu veux dire ;) ? Mon problème est quand même lié
aussi à la façon d'encoder mon fichier source donc je suis pas tant hors
charte que ça. Mais j'ai l'impression que personne ne débogue ici.
La seule différence sont les deux CR en plus comme marqués, c'est bien
cela ? (deux trucs en passant : man cmp et HELP FC ; merci d'avance.)
Oui, c'est bien ça, j'ai supprimé des retour chariot dans un fichier et ça
permet de lire les informations de débogage alors qu'avant c'était pas possible.
OK mais que faire en pratique pour ne pas avoir ce genre de discordance parce
que RIEN n'apparait à un examen visuel du source ?
OK mais je pense que je ne suis pas le premier à rencontrer ce problème ici donc
si quelqu'un a un conseil _pratique_ à me donner je suis preneur (au passage,
n'en profitez pas pour essayer de me convertir à emacs ou vi ;) peine perdue
avec moi, je suis un mécréant !)
Antoine Leca a écrit :
Le 27/02/2009 13:27, candide écrivit :
Donc, à vue de nez un problème lié à un outil en particulier,
probablement GDB.
Je suis hors charte tu veux dire ;) ? Mon problème est quand même lié
aussi à la façon d'encoder mon fichier source donc je suis pas tant hors
charte que ça. Mais j'ai l'impression que personne ne débogue ici.
La seule différence sont les deux CR en plus comme marqués, c'est bien
cela ? (deux trucs en passant : man cmp et HELP FC ; merci d'avance.)
Oui, c'est bien ça, j'ai supprimé des retour chariot dans un fichier et ça
permet de lire les informations de débogage alors qu'avant c'était pas possible.
OK mais que faire en pratique pour ne pas avoir ce genre de discordance parce
que RIEN n'apparait à un examen visuel du source ?
OK mais je pense que je ne suis pas le premier à rencontrer ce problème ici donc
si quelqu'un a un conseil _pratique_ à me donner je suis preneur (au passage,
n'en profitez pas pour essayer de me convertir à emacs ou vi ;) peine perdue
avec moi, je suis un mécréant !)
Antoine Leca a écrit :Le 27/02/2009 13:27, candide écrivit :Donc, à vue de nez un problème lié à un outil en particulier,
probablement GDB.
Je suis hors charte tu veux dire ;) ? Mon problème est quand même lié
aussi à la façon d'encoder mon fichier source donc je suis pas tant hors
charte que ça. Mais j'ai l'impression que personne ne débogue ici.
La seule différence sont les deux CR en plus comme marqués, c'est bien
cela ? (deux trucs en passant : man cmp et HELP FC ; merci d'avance.)
Oui, c'est bien ça, j'ai supprimé des retour chariot dans un fichier et ça
permet de lire les informations de débogage alors qu'avant c'était pas possible.
OK mais que faire en pratique pour ne pas avoir ce genre de discordance parce
que RIEN n'apparait à un examen visuel du source ?
OK mais je pense que je ne suis pas le premier à rencontrer ce problème ici donc
si quelqu'un a un conseil _pratique_ à me donner je suis preneur (au passage,
n'en profitez pas pour essayer de me convertir à emacs ou vi ;) peine perdue
avec moi, je suis un mécréant !)
Le 27/02/2009 13:27, candide écrivit :
Donc, à vue de nez un problème lié à un outil en particulier,
probablement GDB.
Mes sources sont en UTF-8.
Heu ? Désolé mais je n'ai pas vu à quel endroit il y avait des
caractères étendus dans ton source.
Donc je vais supposer que tes sources sont en ASCII, d'accord.Plus précisément, voici les sources et les symptomes (copies de
console) :
-------- a_deboguerOUI.c --------------------------------------
/* int f(int b) { } */ int main(void) { return 0; }}
-------- a_deboguerNON.c --------------------------------------
/* int f(int b) { } */ int main(void) { return 0; }
---------------------------------------------------------------
Ah... Moi j'aurais bien compris si cela avait été le contraire... (la
double accolade à la fin, toussa)
La seule différence sont les deux CR en plus comme marqués, c'est bien
cela ? (deux trucs en passant : man cmp et HELP FC ; merci d'avance.)
Si une ligne est présentée de manière incorrecte pour le compilateur
(mauvaise convention de fins de ligne, NUL ou DEL de bourrage, etc.)
techniquement le comportement est indéfini, et dans la pratique il y a
pas mal de choix !
À mon avis, tu es donc dans le cas où il y a discorde pour une séquence
de caractères CR qui se suivent.
la chandelle (vu que c'est UB et qu'il y a le 0a final qui cache le
warning),
et d'autre part je pense qu'il y a d'autre forums probablement
plus adaptés (mais probablement en anglais), non ?
Le 27/02/2009 13:27, candide écrivit :
Donc, à vue de nez un problème lié à un outil en particulier,
probablement GDB.
Mes sources sont en UTF-8.
Heu ? Désolé mais je n'ai pas vu à quel endroit il y avait des
caractères étendus dans ton source.
Donc je vais supposer que tes sources sont en ASCII, d'accord.
Plus précisément, voici les sources et les symptomes (copies de
console) :
-------- a_deboguerOUI.c --------------------------------------
/* int f(int b) { } */ int main(void) { return 0; }}
-------- a_deboguerNON.c --------------------------------------
/* int f(int b) { } */ int main(void) { return 0; }
---------------------------------------------------------------
Ah... Moi j'aurais bien compris si cela avait été le contraire... (la
double accolade à la fin, toussa)
La seule différence sont les deux CR en plus comme marqués, c'est bien
cela ? (deux trucs en passant : man cmp et HELP FC ; merci d'avance.)
Si une ligne est présentée de manière incorrecte pour le compilateur
(mauvaise convention de fins de ligne, NUL ou DEL de bourrage, etc.)
techniquement le comportement est indéfini, et dans la pratique il y a
pas mal de choix !
À mon avis, tu es donc dans le cas où il y a discorde pour une séquence
de caractères CR qui se suivent.
la chandelle (vu que c'est UB et qu'il y a le 0a final qui cache le
warning),
et d'autre part je pense qu'il y a d'autre forums probablement
plus adaptés (mais probablement en anglais), non ?
Le 27/02/2009 13:27, candide écrivit :
Donc, à vue de nez un problème lié à un outil en particulier,
probablement GDB.
Mes sources sont en UTF-8.
Heu ? Désolé mais je n'ai pas vu à quel endroit il y avait des
caractères étendus dans ton source.
Donc je vais supposer que tes sources sont en ASCII, d'accord.Plus précisément, voici les sources et les symptomes (copies de
console) :
-------- a_deboguerOUI.c --------------------------------------
/* int f(int b) { } */ int main(void) { return 0; }}
-------- a_deboguerNON.c --------------------------------------
/* int f(int b) { } */ int main(void) { return 0; }
---------------------------------------------------------------
Ah... Moi j'aurais bien compris si cela avait été le contraire... (la
double accolade à la fin, toussa)
La seule différence sont les deux CR en plus comme marqués, c'est bien
cela ? (deux trucs en passant : man cmp et HELP FC ; merci d'avance.)
Si une ligne est présentée de manière incorrecte pour le compilateur
(mauvaise convention de fins de ligne, NUL ou DEL de bourrage, etc.)
techniquement le comportement est indéfini, et dans la pratique il y a
pas mal de choix !
À mon avis, tu es donc dans le cas où il y a discorde pour une séquence
de caractères CR qui se suivent.
la chandelle (vu que c'est UB et qu'il y a le 0a final qui cache le
warning),
et d'autre part je pense qu'il y a d'autre forums probablement
plus adaptés (mais probablement en anglais), non ?
OK mais je pense que je ne suis pas le premier à rencontrer ce problème ici donc
si quelqu'un a un conseil _pratique_ à me donner je suis preneur
OK mais je pense que je ne suis pas le premier à rencontrer ce problème ici donc
si quelqu'un a un conseil _pratique_ à me donner je suis preneur
OK mais je pense que je ne suis pas le premier à rencontrer ce problème ici donc
si quelqu'un a un conseil _pratique_ à me donner je suis preneur
Sur une machine *nix classique, le saut de ligne c'est LF (0a), et en ce
qui concerne les CR présents dans le source c'est au bon plaisir du
compilo, soit on ignore, soit on recode comme saut de ligne, voire on
combine selon le contexte, en particulier en ce qui concerne les
séquences ; avec GCC et un source de ce genre (comme ceux qui viennent
d'environnement Macintosh ou MS-Basic), on a une indication grâce au
message « manque une fin de ligne à la fin » qui peut être émis si le
compilateur ne voit pas les CR comme fins de ligne... mais ici il y a
un 0a vicieux en fin de source qui cache cette précieuse indication. Qui
plus est, GDB peut avoir une logique différente de celle de GCC,
puisqu'il n'y a pas de norme établie
À mon avis, tu es donc dans le cas où il y a discorde pour une séquence
de caractères CR qui se suivent.
Sur les systèmes Windows et compagnie, le saut de ligne c'est CR+LF
comme dans ce message ; pour la compatibilité *nix, la grande majorité
des compilateurs acceptent les LF seuls comme équivalents ; par contre,
pour la compatibilité « Mac », on a là aussi des divergences : les
outils de provenance *nix (comme GCC) vont avoir tendance à reprendre le
schéma *nix tel quel (ce qui pourrait expliquer la reproductibilité avec
Mingw), tandis que d'autres peuvent avoir une plus grande compatibilité
; et le compilo C de Microsoft a fonctionné dans le passé avec des
sources Macintosh, en fait probablement fonctionne toujours d'ailleurs,
par exemple pour Office2008.
Sur une machine *nix classique, le saut de ligne c'est LF (0a), et en ce
qui concerne les CR présents dans le source c'est au bon plaisir du
compilo, soit on ignore, soit on recode comme saut de ligne, voire on
combine selon le contexte, en particulier en ce qui concerne les
séquences ; avec GCC et un source de ce genre (comme ceux qui viennent
d'environnement Macintosh ou MS-Basic), on a une indication grâce au
message « manque une fin de ligne à la fin » qui peut être émis si le
compilateur ne voit pas les CR comme fins de ligne... mais ici il y a
un 0a vicieux en fin de source qui cache cette précieuse indication. Qui
plus est, GDB peut avoir une logique différente de celle de GCC,
puisqu'il n'y a pas de norme établie
À mon avis, tu es donc dans le cas où il y a discorde pour une séquence
de caractères CR qui se suivent.
Sur les systèmes Windows et compagnie, le saut de ligne c'est CR+LF
comme dans ce message ; pour la compatibilité *nix, la grande majorité
des compilateurs acceptent les LF seuls comme équivalents ; par contre,
pour la compatibilité « Mac », on a là aussi des divergences : les
outils de provenance *nix (comme GCC) vont avoir tendance à reprendre le
schéma *nix tel quel (ce qui pourrait expliquer la reproductibilité avec
Mingw), tandis que d'autres peuvent avoir une plus grande compatibilité
; et le compilo C de Microsoft a fonctionné dans le passé avec des
sources Macintosh, en fait probablement fonctionne toujours d'ailleurs,
par exemple pour Office2008.
Sur une machine *nix classique, le saut de ligne c'est LF (0a), et en ce
qui concerne les CR présents dans le source c'est au bon plaisir du
compilo, soit on ignore, soit on recode comme saut de ligne, voire on
combine selon le contexte, en particulier en ce qui concerne les
séquences ; avec GCC et un source de ce genre (comme ceux qui viennent
d'environnement Macintosh ou MS-Basic), on a une indication grâce au
message « manque une fin de ligne à la fin » qui peut être émis si le
compilateur ne voit pas les CR comme fins de ligne... mais ici il y a
un 0a vicieux en fin de source qui cache cette précieuse indication. Qui
plus est, GDB peut avoir une logique différente de celle de GCC,
puisqu'il n'y a pas de norme établie
À mon avis, tu es donc dans le cas où il y a discorde pour une séquence
de caractères CR qui se suivent.
Sur les systèmes Windows et compagnie, le saut de ligne c'est CR+LF
comme dans ce message ; pour la compatibilité *nix, la grande majorité
des compilateurs acceptent les LF seuls comme équivalents ; par contre,
pour la compatibilité « Mac », on a là aussi des divergences : les
outils de provenance *nix (comme GCC) vont avoir tendance à reprendre le
schéma *nix tel quel (ce qui pourrait expliquer la reproductibilité avec
Mingw), tandis que d'autres peuvent avoir une plus grande compatibilité
; et le compilo C de Microsoft a fonctionné dans le passé avec des
sources Macintosh, en fait probablement fonctionne toujours d'ailleurs,
par exemple pour Office2008.
ceci est le source dans un éditeur hexa :
0000:0000 2f 2a 0d 69 6e 74 20 66 28 69 6e 74 20 62 29 0d /*.int f(int b) .
0000:0010 7b 0d 20 0d 7d 0d 2a 2f 0d 69 6e 74 20 6d 61 69 {. .}.*/.int ma i
0000:0020 6e 28 76 6f 69 64 29 0d 7b 20 0d 20 20 20 20 72 n(void).{ . r
0000:0030 65 74 75 72 6e 20 30 3b 0d 7d 0d 0a etu rn 0;.}..
Le code hexa du 2ème source :
0000:0000 2f 2a 0d 69 6e 74 20 66 28 69 6e 74 20 62 29 0d /*.int f(int b) .
0000:0010 7b 0d 20 0d 7d 0d 2a 2f 0d 69 6e 74 20 6d 61 69 {. .}.*/.int ma i
0000:0020 6e 28 76 6f 69 64 29 0d 7b 20 0d 0d 0d 20 20 20 n(void).{ ...
0000:0030 20 72 65 74 75 72 6e 20 30 3b 0d 7d 0d 0a return 0;.}..
ceci est le source dans un éditeur hexa :
0000:0000 2f 2a 0d 69 6e 74 20 66 28 69 6e 74 20 62 29 0d /*.int f(int b) .
0000:0010 7b 0d 20 0d 7d 0d 2a 2f 0d 69 6e 74 20 6d 61 69 {. .}.*/.int ma i
0000:0020 6e 28 76 6f 69 64 29 0d 7b 20 0d 20 20 20 20 72 n(void).{ . r
0000:0030 65 74 75 72 6e 20 30 3b 0d 7d 0d 0a etu rn 0;.}..
Le code hexa du 2ème source :
0000:0000 2f 2a 0d 69 6e 74 20 66 28 69 6e 74 20 62 29 0d /*.int f(int b) .
0000:0010 7b 0d 20 0d 7d 0d 2a 2f 0d 69 6e 74 20 6d 61 69 {. .}.*/.int ma i
0000:0020 6e 28 76 6f 69 64 29 0d 7b 20 0d 0d 0d 20 20 20 n(void).{ ...
0000:0030 20 72 65 74 75 72 6e 20 30 3b 0d 7d 0d 0a return 0;.}..
ceci est le source dans un éditeur hexa :
0000:0000 2f 2a 0d 69 6e 74 20 66 28 69 6e 74 20 62 29 0d /*.int f(int b) .
0000:0010 7b 0d 20 0d 7d 0d 2a 2f 0d 69 6e 74 20 6d 61 69 {. .}.*/.int ma i
0000:0020 6e 28 76 6f 69 64 29 0d 7b 20 0d 20 20 20 20 72 n(void).{ . r
0000:0030 65 74 75 72 6e 20 30 3b 0d 7d 0d 0a etu rn 0;.}..
Le code hexa du 2ème source :
0000:0000 2f 2a 0d 69 6e 74 20 66 28 69 6e 74 20 62 29 0d /*.int f(int b) .
0000:0010 7b 0d 20 0d 7d 0d 2a 2f 0d 69 6e 74 20 6d 61 69 {. .}.*/.int ma i
0000:0020 6e 28 76 6f 69 64 29 0d 7b 20 0d 0d 0d 20 20 20 n(void).{ ...
0000:0030 20 72 65 74 75 72 6e 20 30 3b 0d 7d 0d 0a return 0;.}..
Et oui, c'est pour ça que je vais prendre Kate qui est un peu moins som maire.
Sous codeBlocks (IDE, des trucs qui doivent t'être complètement étr angers), je
crois qu'on peut aussi régler les fin de lignes (CR, LF ou CRLF).
Et oui, c'est pour ça que je vais prendre Kate qui est un peu moins som maire.
Sous codeBlocks (IDE, des trucs qui doivent t'être complètement étr angers), je
crois qu'on peut aussi régler les fin de lignes (CR, LF ou CRLF).
Et oui, c'est pour ça que je vais prendre Kate qui est un peu moins som maire.
Sous codeBlocks (IDE, des trucs qui doivent t'être complètement étr angers), je
crois qu'on peut aussi régler les fin de lignes (CR, LF ou CRLF).
Jean-Marc Bourguet a écrit :Pourquoi? Je ne sais pas comment tu es arrivé à avoir des fichiers avec
les fins de ligne encodées comme ça.
Moi non plus, peut-être des mélange de fichiers texte Linux et Windows.
Jean-Marc Bourguet a écrit :
Pourquoi? Je ne sais pas comment tu es arrivé à avoir des fichiers avec
les fins de ligne encodées comme ça.
Moi non plus, peut-être des mélange de fichiers texte Linux et Windows.
Jean-Marc Bourguet a écrit :Pourquoi? Je ne sais pas comment tu es arrivé à avoir des fichiers avec
les fins de ligne encodées comme ça.
Moi non plus, peut-être des mélange de fichiers texte Linux et Windows.
OK, donc en principe, sous Unix, je ne devrais pas avoir de problème si tous mes
sauts de lignes sont codés en 0a (alias LF ?). Et si par hasard j'ai du Od (ce
que je vois régulièrement dans mes fichiers), je change en 0a, c'est bon ?
OK, donc en principe, sous Unix, je ne devrais pas avoir de problème si tous mes
sauts de lignes sont codés en 0a (alias LF ?). Et si par hasard j'ai du Od (ce
que je vois régulièrement dans mes fichiers), je change en 0a, c'est bon ?
OK, donc en principe, sous Unix, je ne devrais pas avoir de problème si tous mes
sauts de lignes sont codés en 0a (alias LF ?). Et si par hasard j'ai du Od (ce
que je vois régulièrement dans mes fichiers), je change en 0a, c'est bon ?
Mais je le répète, le plus simple est de tout faire au format
unixoïde, même sous Windows.
Mais je le répète, le plus simple est de tout faire au format
unixoïde, même sous Windows.
Mais je le répète, le plus simple est de tout faire au format
unixoïde, même sous Windows.