c # - CRT fejlsøgning af korruptionshugger fundet i en administreret tjeneste

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg får beskedboksen CRT Heap corruption detected i et C # Windows-serviceprogram.
Jeg kan ikke finde kilden til korruptionen i bunken, og meddelelsesboksen fortsætter med at vises, selvom jeg kompilerer i frigivelsestilstand.
Korruptionshallen er sandsynligvis i en af ​​de ustyrede DLL-filer, der bruges af min tjeneste (men jeg ved ikke hvor).



  1. Hvordan kan jeg finde kilden til problemet?

  2. Hvordan kan jeg deaktivere meddelelsesboksen?


Bedste reference


Kør dit program med Gflags.exe og Pageheap.exe. Dette vil hjælpe dig med at fælde, hvor korruptionen sker. [1] [2]

Andre referencer 1


Fejlen er fra en indfødt DLL, som enten er fejlbehæftet eller misbrugt. For at finde ud af hvilken, kan du bruge Process Explorer til at undersøge stacksporerne af dine apps tråde, når meddelelsen er dukket op. DLL'en vil være omkring toppen af ​​stakken (meddelelsesboksens ting vil være over det). Du vandt 't se korruptionens rod, selvom - fejlen opdages når hukommelsen er frigivet. [3]


Du kan muligvis deaktivere meddelelsen ved hjælp af en af ​​disse muligheder, men du vil kun skjule problemet. Hvis din bunke bliver beskadiget, kan dine data blive ødelagt også.


BTW, AFAIK, disse meddelelser vises kun på debug builds, hvilket betyder at den native DLL er i debug build. Hvis det er noget tredjeparts s, ville det være underligt. Hvis det er din, kan du bare vedhæfte en debugger til processen, og den vil gå i stykker, når meddelelsen er dukket. Du får stadig ikke roden til fejlen, men du får et bedre billede af sammenhængen.