Forum: PC-Programmierung Windows GPF-Meldung unterdrücken, Konsolenprogramm


von Joachim D. (Firma: JDCC) (scheppertreiber)


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).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Joachim Drechsel schrieb:
> Kann man irgendwie diese Meldung unterdrücken ?

Unter XP: Drwtsn32 aufrufen, entsprechende Optionen einstellen.

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

In der Hilfe steht da etwas von einem "Programmfehlerhandler".
Hmmmm ...

Eine Option zum Unterbinden der MsgBox gibt es da leider nicht.

In C++ sollte man das mit try/catch erwischen. Habe ich leider nicht.

Aber erstmal Danke für den Tip, vielleicht komme ich in der
Richtung weiter.

von Joachim D. (Firma: JDCC) (scheppertreiber)


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).

von Rufus Τ. F. (rufus) Benutzerseite


Angehängte Dateien:

Lesenswert?

Joachim Drechsel schrieb:
> Eine Option zum Unterbinden der MsgBox gibt es da leider nicht.

Das Häkchen vor "visuelle Benachrichtigung" meinte ich.

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Sieht bei mir auch so aus. Ohne Häkchen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dann ist die angezeigte Meldung ein zur Runtimelibrary Deines Programmes 
bzw. des verwendeten Compilers gehörender 
Fehlerbehandler/Exceptionhandler. Wie Du den loswirst, hast Du ja 
zwischenzeitlich auch schon rausgefunden.

von Joachim D. (Firma: JDCC) (scheppertreiber)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Rufus Τ. Firefly schrieb:
> 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.

Ich werde mal wühlen ..

Danke !

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.