OVH Cloud OVH Cloud

Marquage des infos de debogage

18 réponses
Avatar
candide
Bonjour,

Je suis confronté à un phénomène très curieux.

Ça se passe sous Linux Ubuntu HH, avec gcc et gdb. En bref, j'ai deux fichiers
source, que j'ai tenté de réduire au minimum pour que mon problème demeure
reproductible.

L'un, une fois compilé avec gcc -g peut me montrer les infos de débogage MAIS si
j'ampute le fichier source de quelques caractères non imprimables (saut de ligne
et espaces), quand je compile avec gcc -g, plus aucune info de débogage lisible.

Avez-vous déjà rencontré ça ?

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.
Je n'ai pas essayé avec d'autres compilateurs genre Open Watcom.

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

candide@candide-desktop:~$ gcc -g -W -Wall -std=c99 -pedantic -o x a_deboguerOUI.c
candide@candide-desktop:~$ ./x
candide@candide-desktop:~$ gdb x
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...
(gdb) list
1 /*^Mint f(int b)^M{^M ^M}^M*/^Mint main(void)^M{ ^M return 0;^M}
(gdb)

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;.}..

-------- a_deboguerNON.c --------------------------------------
/* int f(int b) { } */ int main(void) { return 0; }
---------------------------------------------------------------

candide@candide-desktop:~$ gcc -g -W -Wall -std=c99 -pedantic -o x a_deboguerNO.c
candide@candide-desktop:~$ gdb x
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...
(gdb) list
Line number 2

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;.}..


Quelqu'un a-t-il une petite idée d'explication ?

Merci d'avance

8 réponses

1 2
Avatar
candide
-ed- a écrit :

Je ne comprends pas pourquoi il y a des 0d (^M) dans tes codes
sources. La fin de ligne sous unixoïde, c'est 0a. Ton format texte
n'est pas conforme. Le comportement est indéfini.




Euh non si j'ai bien compris, ça dépend de l'implémentation.
Avatar
candide
-ed- a écrit :

Il n'y a aucune raison que tu ais des 0d 'par hasard'.





demandé en agissant sur sa configuration. Pas de place pour le hasard.




T'es vraiment quelqu'un de conflictuel avec tes allusions lourdingues. J'adore
comment tu essayes de te faire passer pour un scientifique rigoureux à peu de
frais. Mais faudrait pas confondre rigueur scientifique et psycho-rigidité.
Avatar
espie
In article <49a9431c$0$24233$,
candide wrote:
-ed- a écrit :

Il n'y a aucune raison que tu ais des 0d 'par hasard'.





demandé en agissant sur sa configuration. Pas de place pour le hasard.




T'es vraiment quelqu'un de conflictuel avec tes allusions lourdingues. J'adore
comment tu essayes de te faire passer pour un scientifique rigoureux à peu de
frais. Mais faudrait pas confondre rigueur scientifique et psycho-rigidité.



Tu serais pas un peu vexe, par hasard ?

J'avoue que, pour arriver a te retrouver avec *seulement* des ^M dans ton
fichier, en en bossant que sur du Unix ou du Windows, je ne vois vraiment
pas comment tu t'es demerde. Je veux bien que Windows soit buggue et ses
outils pourris, mais sans bidouillage non controle de ta part, je ne vois
vraiment pas comment tu peux finir dans une situation pareille.

En termes plus crus: tu as certainement fait une connerie. Tu ne t'en souviens
pas parce que tu n'as rien compris au moment ou tu as fait la connerie, et
ca va etre impossible a "retrouver" maintenant, mais c'est virtuellement
impossible que tu te sois retrouve dans une situation aussi grotesque
"par hasard".
Avatar
candide
Marc Espie a écrit :
frais. Mais faudrait pas confondre rigueur scientifique et psycho-rigidité.

Tu serais pas un peu vexe, par hasard ?



De quoi pourrais-je bien être vexé en l'espèce ? Par contre qu'Emmanuel Delahaye
essaye à peu de frais et sur mon dos de se faire passer pour le détenteur de la
Rigueur, oui, ça va me faire réagir parce que je connais l'envergure du bonhomme
et vu son amabilité naturelle, je vais pas lui faire de cadeau. Qu'est-ce qu'il
a dit de consistant ? Rien, il a enfoncé des portes ouvertes : je m'en doute
que ce n'est pas arrivé là par hasard, mais est-t-on bien avancé après avoir dit
un truisme pareil ? Je n'en connais pas la cause, et si j'ai fait une "connerie"
comme tu dis plus loin, et alors ? tu crois que je vais me culpabiliser pour
autant, j'ai utilisé mon éditeur et ma distribution de la façon la plus normale
qui soit, j'ai fait une connerie, ça ne me dérange pas, je suis pas du sérail.
Et quant à cet "connerie" que j'aurais faite, tu as visiblement du mal à
imaginer quelle pourrait en être la nature donc je ne vois pas ce que ta
contribution apporte.

Par contre, des conseils d'Antoine, j'ai pu déduire que si je filtrais les fins
de ligne avec un éditeur qui me les garantisse, je n'aurais plus de problème, ce
qui me suffit. Parce que si je dois me faire une enquête pour savoir d'où
viennent des foutus Od dans mes fichier texte sous Linux, je suis pas prêt de
pouvoir utiliser mon débogueur tranquillement.



J'avoue que, pour arriver a te retrouver avec *seulement* des ^M dans ton
fichier, en en bossant que sur du Unix ou du Windows, je ne vois vraiment
pas comment tu t'es demerde. Je veux bien que Windows soit buggue et ses
outils pourris, mais sans bidouillage non controle de ta part, je ne vois
vraiment pas comment tu peux finir dans une situation pareille.




Ben oui, visiblement t'es même pas en mesure d'imaginer ce qui s'est passé. Si
tu fais une recherche Google, tu verras pourtant que je ne suis pas le premier à
qui ça arrive.

En termes plus crus: tu as certainement fait une connerie. Tu ne t'en souviens
pas parce que tu n'as rien compris au moment ou tu as fait la connerie, et
ca va etre impossible a "retrouver" maintenant, mais c'est virtuellement
impossible que tu te sois retrouve dans une situation aussi grotesque
"par hasard".



T'es psycho-rigide toi aussi ? Evidemment que c'est pas par hasard, comme dirait
Pangloss qui "prouvait admirablement qu’il n’y a point d’effet sans cause". Et
c'est encore moins par hasard puisqu'il semble totalement exceptionnel que ça
arrive sous Unix. Pourtant, je constate que tu n'as même pas l'idée d'où peut
venir le problème. Tu raisonnerais pas par hasard toi ?

Si vous n'êtes pas capable de lire entre les lignes et de comprendre ce que peut
signifier "par hasard" dans un certain contexte, c'est que vous devriez aller
vous aérer un peu. Qu'Emmanuel Delahaye ait réagit de la sorte ne m'étonne pas
du tout, c'est en rapport avec son étroitesse d'esprit et sa rigidité
proverbiale. Par contre, que tu apportes de l'eau à son moulin et du bruit au
bruit m'étonne bien davantage.
Avatar
Antoine Leca
Le 28/02/2009 14:14, Marc Espie écrivit :
J'avoue que, pour arriver a te retrouver avec *seulement* des ^M dans ton
fichier, en en bossant que sur du Unix ou du Windows, je ne vois vraiment
pas comment tu t'es demerde.



Et en fait, s'il n'avait QUE de CR dans son fichier, il aurait peut-être
bien eu un averto de la part de GCC (source pas terminé par une fin de
ligne ; enfin c'était comme cela en 1996 lorsque j'avais des sources Mac
qui traînaient).
Mais pour bien compliqué l'affaire, il y a un opportun LF tout à la fin
du source.


Antoine
Avatar
Antoine Leca
Le 28/02/2009 13:52, candide écrivit :
-ed- a écrit :

Je ne comprends pas pourquoi il y a des 0d (^M) dans tes codes
sources. La fin de ligne sous unixoïde, c'est 0a. Ton format texte
n'est pas conforme. Le comportement est indéfini.



Euh non si j'ai bien compris, ça dépend de l'implémentation.



En fait, cela dépend de la définition que donne (dans sa documentation)
l'implémentation de ce qui constitue une fin de ligne.

Si CR est accepté comme fin de ligne sans plus de commentaires, c'est un
bogue.

Si CR est accepté « avec commentaires », genre « à des fins de
compatibilité », la responsabilité est encore plus limitée.

Si CR n'est pas explicitement accepté (à la fois pour le compilateur et
le débogueur), vu que ce n'est pas implicite puisque le standard *nix
c'est LF alias NL, techniquement tu as un caractère non prévu dans le
source qui ne fait partie ni d'un identificateur, d'une chaîne etc. (cf.
5.2.1), donc le comportement est indéfini.


Antoine
Avatar
Stephane Legras-Decussy
"candide" a écrit dans le message de news:
49a96b2b$0$12393$
ça va me faire réagir parce que je connais l'envergure du bonhomme
et vu son amabilité naturelle, je vais pas lui faire de cadeau.



les précautions oratoires, ça use le clavier et ça bouffe
la bande passante...et puis on est pas sur meetic...
Avatar
candide
Stephane Legras-Decussy a écrit :

les précautions oratoires,



les précautions oratoires, ça montre aussi parfois qu'on a un certain sens de
l'analyse, du détail et de la nuance (et du respect d'autrui accessoirement) ce
qui n'est pas totalement inutile lorsque au s'intéresse au langage C.


ça use le clavier et ça bouffe
la bande passante...



Concernant la bande passante, j'ai un doute ;)
1 2