8
votes

GCC et -FSanitize = fuite

Je travaille et sur un grand projet C ++ et je le fais compiler avec Clang serait douloureux, alors je suis coincé avec GCC.

Je veux utiliser le Nice -Fsanitize = fuite code > Drapeau que j'ai déjà utilisé avec Clang sur un emploi précédent, mais cela ne semble pas fonctionner. P>

J'ai fait un exemple très simple pour le tester: P>

g++ -fsanitize=address main.cpp
ASAN_OPTIONS=detect_leaks=1 ./a.out


5 commentaires

Faire votre plate-forme de code indépendante est un effort qui paiera à long terme. Le rendre compatible avec Clang est une première étape dans la bonne direction. Vas-y ;-)


Je suis d'accord, et ce n'est généralement pas si long / difficile de le faire. Et dans certains cas, Clang a trouvé des avertissements intéressants dans votre code que GCC ne voit pas


Je suis d'accord avec vous les gars, mais nous avons des caractéristiques que Clang a des problèmes, comme le code de montage.


Ai-je manqué une mention de la version GCC dans votre message? GCC-5 semble faire ce que vous voulez.


En effet je n'ai pas précisé cela. J'utilise GCC 4.9. Je vais essayer GCC 5 Asap!


3 Réponses :


2
votes

Vous devez lire ceci et utiliser le patch:

https://gcc.gnu.org/ml/ GCC-patchs / 2013-11 / msg01874.html


1 commentaires

Nice, il semble que le désinfectant soit la même chose que Clang. J'ai trouvé un article de blog sur la façon de l'utiliser avec qt, il devrait être assez proche de l'utiliser sans qt: blog.qt.io/blog/2013/04/17/...



1
votes

Je l'ai résolu avec GCC 5.1 (j'utilisais 4.9).

Edit: On dirait que 5.2 ne fonctionne pas non plus EDIT2: Cela ne fonctionne pas avec le GCC fourni avec Ubuntu 15.10 (5.2.1), mais j'ai recompilé un 5.2.0 des sources et cela a bien fonctionné. Je n'ai vraiment aucune idée.


4 commentaires

Ça marche pour moi. Si cela ne fonctionne pas pour vous, vous devez signaler un bogue à votre distribution (si vous avez installé un GCC pré-compilé) ou directement sur GCC si vous l'avez compilée à partir de la source.


Quelle version utilisez-vous? Avec le GCC (5.1.1) fourni avec Ubuntu 15.04, c'est bien, mais je ne peux pas le faire fonctionner avec GCC 5.2.1 (Ubuntu 15.10). J'ai compilé un GCC 5.1 sur un Ubuntu 15.10 et c'était bien, alors je pense vraiment que c'est une régression. Je vais essayer avec un recompilé 5.2 juste pour être sûr.


J'utilise 5.2.1 des tests Debian. Veuillez signaler ce problème à Ubuntu.


Je cherche d'abord des options de compilation pour GCC



2
votes

J'ai eu le même problème (avec Ubuntu 15.04 et GCC 4.9.2).

Utiliser ldd J'ai remarqué que liblsan.so n'était pas lié, alors voici comment je l'ai réparé:

1) Forcer la liaison lors de la compilation

>> GCC -FSanitize = fuite main.cpp -llsan

2) exécuter avec

./.out


0 commentaires