Windows GPF-Meldung unterdrücken, Konsolenprogramm

(Firma: JDCC) #2918120
Lesenswert?

Servus,

Szenario: WinXP, ich importiere mit einem Konsolenprogramm haufenweise
Daten ( bis zu 1 TB pa). Klar passieren da Fehler, ab und zu schießt es
auch mal das Programm ab. Auf XP kommt dann eine Windows-MsgBox mit
der netten Aufforderung, jetzt mal auf "ok" zu klicken.

Blöd, wenn das auf einem anderen Rechner passiert und ich mich per
VPN darauf einloggen muß wenn sich das Programm mal länger nichr rührt.

Kann man irgendwie diese Meldung unterdrücken ? Einen Crash bekomme
ich auch so mit.

Das Programm wird über ein Batchfile gestartet, nicht manuell.

(WinXP, Open Watcom C).
(Firma: JDCC) #2918961
Lesenswert?

Eine Lösung habe ich gefunden:
1
char    *p = NULL;
2

3
SetErrorMode( SetErrorMode( SEM_NOGPFAULTERRORBOX)
4
  |SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
5
strcpy( p, "Hallo");

haut es zuverlässig mit einem GPF in die Landschaft. An das aufrufende
Programm kommt ein errorlevel -1 zurück. Die MsgBox kommt nicht.

(ob das bei allen denkbaren Fehlern so geht weiß ich noch nicht, scheint
aber schon mal brauchbar).
(Firma: JDCC) #2919033
Lesenswert?

Rufus Τ. Firefly schrieb:
> Dann ist die angezeigte Meldung ein zur Runtimelibrary Deines Programmes
> bzw. des verwendeten Compilers gehörender
> Fehlerbehandler/Exceptionhandler.

Mir scheint eher, es ist Windows selbst.

Ich habe noch einen PC mit W98, da schreibt er mir nur die Register
in die Console. Ist also abhängig von der Windows-Version. Die .exe
war die gleiche.
Persönliche Seite #2919106
Lesenswert?

Joachim Drechsel schrieb:
> Mir scheint eher, es ist Windows selbst.

Es gibt einen Fehlerhandler von Windows -- das ist (bis einschließlich 
XP) Dr.Watson, den man wie oben beschrieben konfigurieren kann. (Ab 
Vista ist das werfault.exe, ja, die Jungs sind kreativ, was die 
Namenvergabe angeht).

Beide nutzen die von Windows vorgesehene Debugschnittstelle; wird ein 
Entwicklungssystem à la Visual Studio installiert, kann auch das sich 
dort einklinken, so daß beim Absturz eines Programmes gleich ein 
Debugger geladen werden kann.


Es gibt aber eben auch --zumindest bei manchen Compilern-- in der 
Runtimelibrary verborgenen Code zum Fehlerabfangen, der vor allem in 
Debug-Releases vorhanden ist, und der unabhängig von Dingen wie 
Dr.Watson aktiv wird.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren