c ++ - Kan dialogboksen 'Programfejl' deaktiveres?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger Hudson som en kontinuerlig integrationsserver til at teste C/C ++-kode. Desværre har jeg en fejl et sted der forårsager hukommelse korruption, så på nogle Windows-maskiner vil jeg nogle gange få en 'Application Error' dialogboks, der forklarer, at en instruktion refererede hukommelse, der ikke kunne læses. Denne dialogboks springer op og hænger grundlæggende testkørslen, da det kræver manuel indgriben.


Er der en måde at forhindre, at denne dialogboks vises på, så testkørslen simpelthen fejler og rapporteres som sådan i Hudson?


Er det muligt at automatisk generere en minidump i stedet for at vise dialogen?

Bedste reference



  1. Brug 'Deaktiver fejlrapportering', som hr. forsigtigt foreslår. Se også denne PC World-artikel.

  2. Hvis du tilfældigvis har MS Visual Studio på din byggemaskine, vil det fange applikationsfejl og dukker op en dialogboks. Hvis du vil deaktivere disse dialoger (og også Just-In-Time Debugging-funktionen i Visual Studio), skal du køre kommandoen drwtsn32.exe -i for at indstille Dr. Watson som standard systemfejlfinding. Dr. Watson vil generere en kerne dump og stille exit. (Se denne Microsoft Knowledge Base-artikel: http://support.microsoft.com/kb/q121434/.)


Andre referencer 1


Du kan også gøre noget som dette programmatiske ved at bruge SetErrorMode . Se denne artikel for flere detaljer. [8] [9] [10]


Et simpelt eksempel på hvordan man bruger det er at gøre følgende:


SetErrorMode(GetErrorMode () | SEM\_NOGPFAULTERRORBOX);


Ovenstående 'ORs' den aktuelle tilstand med vores ønskede tilsætning.

Andre referencer 2


Ud over hvad rkb sagde, hvis du kører Windows XP 64bit, er der to sæt værdier. De i den sædvanlige registerplacering og dem under Wow6432Node nøglen i HKLM. For at opdatere begge, kør drwtsn32.exe -i fra både \%SYSTEMROOT\%system32 og \%SYSTEMROOT\%SysWOW64.

Andre referencer 3


Deaktiver fejlrapportering via:



  • Registrering af registreringsdatabasen - Tilføj din ansøgning til HKEY\_LOCAL\_MACHINE \ SOFTWARE \ Microsoft \ PCHealth \ ErrorReporting \ ExclusionList, OR

  • Højreklik på Denne computer, gå til fanen Avanceret og vælg alternativet 'Deaktiver fejlrapportering', OR

  • Du kan navigere til servicekonsollen i Administrative værktøjer, finde fejlrapporteringstjenesten, gå ind i egenskaber og deaktivere den


Andre referencer 4


Du kan bruge de forskellige \_CrtSetReport funktioner til at styre den måde, hvorpå C/C ++ runtime reagerer på forskellige fejl (\_CrtSetReportHook, \_CrtSetReportMode, \_CrtSetReportFile, \_CrtSetReportHook2)

Andre referencer 5


Brug en prøve/catch statement til at fange undtagelsen og håndtere det som du vil.