Page 1 sur 1
Debuggage C++ : comment traquer un heap corruption random sous Windows ?
Publié : jeu. oct. 31, 2024 12:49 am
par toto_tech
Aidez-moi, je suis en train de devenir fou ! Mon appli C++ (compilée avec VS2022) crash aléatoirement avec un heap corruption. J'ai essayé PageHeap, CRT debug, mais le crash se produit dans n'importe quelle allocation. Des techniques avancées pour tracer ça ?
Re: Debuggage C++ : comment traquer un heap corruption random sous Windows ?
Publié : jeu. oct. 31, 2024 5:49 am
par max1965
Les heap corruptions... le pire ! As-tu essayé Application Verifier ? Active tous les checks sauf ceux qui ralentissent trop. Et surtout, regarde les allocations juste AVANT le crash, pas forcément celle qui échoue.
Re: Debuggage C++ : comment traquer un heap corruption random sous Windows ?
Publié : jeu. oct. 31, 2024 7:49 am
par yanis1964
J'ai eu un cas similaire l'an dernier qui venait d'un std::string mal copié dans un callback multithread. Depuis, j'utilise systématiquement AddressSanitizer (même sous Windows, avec clang-cl). Ça a trouvé 3 corruptions que les outils MS ne voyaient pas.
Re: Debuggage C++ : comment traquer un heap corruption random sous Windows ?
Publié : jeu. oct. 31, 2024 11:49 am
par guillaume
Un conseil qui m'a sauvé la vie : dump mémoire au moment du crash (procdump -ma) et analyse offline avec WinDbg. Souvent la corruption est visible dans les patterns d'allocations. Et vérifie tes pointeurs partagés, c'est souvent là que ça merde.
Re: Debuggage C++ : comment traquer un heap corruption random sous Windows ?
Publié : jeu. oct. 31, 2024 7:49 pm
par toto_tech
Merci à tous ! J'ai lancé Application Verifier + AddressSanitizer (merci @201 pour l'astuce clang-cl). Bingo : c'était un double delete dans un shared_ptr custom qui n'était pas thread-safe. Vous êtes des sauveurs !