GDB - optimized out

GDB - optimized out

by Timothée Bader -
Number of replies: 3

Bonjour,

En utilisant GDB pour essayer de déverminer mon programme, j'ai appris grâce au message <optimized out> qu'une variable était optimisée par le compilateur et que GDB n'y a pas accès, soit parce qu'il est impossible de la représenter, soit parce qu'elle n'existe pas. Quoiqu'il en soit, elle ne s'incrémente pas correctement et cela cause un comportement imprévisible. J'ai recompilé mon code en -O0 (et pas en -O3) et mon programme fonctionne correctement (et GDB peut aussi donner la valeur de la variable).

Dès lors, s'agit-il d'une insuffisance de mémoire? Pourtant, je passe la majorité de mes paramètres par référence (en particulier ceux qui sont volumineux). J'ai également essayé de déclarer des short à la place des int pour tenter d'économiser de l'espace mémoire, mais cela ne suffit pas.

Cette erreur aurait-t-elle une autre cause? Dans tous les cas, que puis-je faire?

En vous remerciant pour votre temps,

Timothée Bader

In reply to Timothée Bader

Re: GDB - optimized out

by Ronan Boulic -

En fait, on ne peut pas avoir en même temps les options pour le debuggage qui rajoutent de l'information dans l'exécutable, et les options d'optimisation des performances où on laisse le compilateur prendre des décisions pour aller plus vite.

c'est l'un ou l'autre mais pas les deux (ou-exclusif)

In reply to Ronan Boulic

GDB - optimized out

by Timothée Bader -
J'imagine bien... Mais ça ne résout pas mon problème. Les options d'optimisation n'empêchent pas seulement GDB de lire la variable, elles empêchent aussi mon programme de fonctionner correctement.
Ainsi, j'obtiens un filtrage correct si je compile en -O0 et, en -O3, une image noire, ou bleue, verte, voire un segmentation fault, ça dépend des fois. Cela vient vraisemblablement du fait que comme ma variable a un impact sur l'indice de la table des couleurs associé, celui-ci déborde parfois. A noter qu'à une exception près, mon image est toujours uniforme.
In reply to Timothée Bader

Re: GDB - optimized out

by Antoine Hugo Thomas Fontaine -

Je ne pense vraiment pas que ça soit un problème de mémoire. À priori, c'est plutôt que le code est tout bonnement supprimé car considéré inutile par le compilateur. -O3 est le mode de compilation le plus agressif, mais normalement, à moins de se fier à un comportement indéterminé par le standard, il ne devrait pas y avoir de problèmes.

Je pense que sans avoir accès au code, il est très difficile d'apporter une solution.

Maintenant, si tu te sens motivé, tu peux recopier la fonction et les quelques typedefs peut-être nécessaires sur the compiler explorer https://godbolt.org/ et comparer avec et sans -O3 le code assembleur généré. Même si il ne précise pas le code supprimé, on peut voir la correspondance entre les deux langages avec les couleurs. C'est en anglais, mais des infobulles expliquent les instructions pour le profane, donc ça devrait quand-même être compréhensible