Debuggage C++ : comment traquer un heap corruption random sous Windows ?
Debuggage C++ : comment traquer un heap corruption random sous Windows ?
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 ?
Sauvegardez, bon sang
Re: Debuggage C++ : comment traquer un heap corruption random sous Windows ?
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.
Full AMD, full silence
Re: Debuggage C++ : comment traquer un heap corruption random sous Windows ?
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 ?
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 ?
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 !
Sauvegardez, bon sang