Debuguer la corruption de heap en C++ sous Linux

elise-foucher 09/05/2026
RÉSOLU

Salut à tous, je galère avec une corruption de heap intermittente dans un service C++ critique. Le binaire plante aléatoirement avec un double free or corruption sans message clair. J'ai déjà tenté d'utiliser valgrind, mais le surcoût mémoire fait disparaître le bug. Est-ce que quelqu'un aurait une approche plus légère pour isoler l'allocation fautive ?

09/05/2026 à 06:24

11 commentaires

As-tu essayé d'utiliser AddressSanitizer (ASan) à la compilation ? C'est bien plus performant que valgrind et ça intercepte les accès invalides en temps réel.

10/05/2026 à 04:57

Pas encore, mais mon binaire est assez lourd. Est-ce que l'overhead reste acceptable en production ou environnement de pré-prod ?

10/05/2026 à 17:47

ASan ajoute environ 2x de consommation mémoire. Si tu ne peux pas te le permettre, essaye GWP-ASan, c'est conçu spécifiquement pour les bugs mémoire en production avec un impact minimal.

11/05/2026 à 17:33

Je ne connaissais pas GWP-ASan. Je vais regarder la documentation. Merci pour le tips.

12/05/2026 à 09:29

Vérifie aussi tes LD_PRELOAD, parfois une bibliothèque tierce corrompt le segment de données avant même que ton main ne démarre.

13/05/2026 à 05:46

D'accord avec 3, vérifie avec ldd si une version différente de glibc n'est pas chargée par erreur.

13/05/2026 à 21:32

Je vais auditer les dépendances. C'est une piste intéressante, on a récemment migré vers une nouvelle version de la glibc.

14/05/2026 à 20:04

Si c'est la glibc, regarde du côté de MALLOC_CHECK_. En réglant la variable à 3, tu peux forcer un dump immédiat lors de la corruption.

15/05/2026 à 13:35

Super, je tente export MALLOC_CHECK_=3 dès lundi sur l'environnement de test.

16/05/2026 à 02:43

Pense aussi à générer un core dump pour analyser avec gdb le stack trace exact au moment du plantage.

16/05/2026 à 17:21

Merci à tous pour ces retours. Je commence par MALLOC_CHECK_ et je passe sur AddressSanitizer si ça ne suffit pas.

17/05/2026 à 07:27

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire