Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Exception handling in C

1 view
Skip to first unread message

Markus Ronneberger

unread,
Mar 26, 1998, 3:00:00 AM3/26/98
to

Hi!

Ich arbeite mit dem IBM C/C++ Set und versuche bei Programmen, die praktisch
rund um die Uhr laufen werden, zu ermitteln, wann die aus welchem Grund
abgestürzt sind. Trotz Absturz wird das Programm laufen, weil es ständig neu
gestartet wird durch verschiedene Anwender. Problem ist eben nur, daß ich
keinen Überblick darüber habe, wann und wie oft das Programm abgestürzt war.
Um mehr darüber in Erfahrung zu bringen, hatte ich mein Programm mit einem
Exception-Handler ausgestattet, der im Falle einer Exception einen
Logbucheintrag generiert, nebst Programmadresse. Auf diese Weise kann ich so
manchen Fehler finden. Leider mußte ich diese Methode wieder ausbauen, weil
die Exception-Handler den Stack durcheinander brachten, so daß das Programm
sich grob verrechnet hat und oft sogar an völlig harmlosen Stellen
abstürzte, weil sich lokale Variablen nach einem Funktionsaufruf dermaßen
zerschossen hatten, daß ein weiterarbeiten nicht möglich war.
Die Quellcodes für meinen Exceptionhandler habe ich überwiegend aus den
Beispielen der C Set Doku.

Nun ist aber die wichtige Frage, wenn die Beispiele so nicht funktionieren,
wie dann? Oder gibt es eine andere Möglichkeit sich über Programmabstürze
ein Logbuch führen zu lassen? Gibt es vielleicht sogar eine Möglichkeit sich
im Falle einer Exception den Programmstack ausgeben zu lassen, ähnlich einem
Debugger, so daß ich sehen kann welches die letzten Funktionsaufrufe waren?

Ich hoffe hier kann mir irgendjemand weiterhelfen.

Danke schonmal, Markus.


Tilmann Runck

unread,
Mar 26, 1998, 3:00:00 AM3/26/98
to

Hi Markus

MR>Gibt es vielleicht sogar eine Möglichkeit sich
MR>im Falle einer Exception den Programmstack ausgeben zu lassen
gibt es.

Armin, deine Baustelle ;-)

Alla dann
Tilmann

Matthias Heidbrink

unread,
Mar 26, 1998, 3:00:00 AM3/26/98
to

Hallo Markus,

MR>Um mehr darüber in Erfahrung zu bringen, hatte ich mein Programm mit
MR>einem Exception-Handler ausgestattet, der im Falle einer Exception
MR>einen Logbucheintrag generiert, nebst Programmadresse. Auf diese Weise
MR>kann ich so manchen Fehler finden. Leider mußte ich diese Methode
MR>wieder ausbauen, weil die Exception-Handler den Stack durcheinander
MR>brachten, so daß das Programm sich grob verrechnet hat und oft sogar an

MR>völlig harmlosen Stellen abstürzte, weil sich lokale Variablen nach
MR>einem Funktionsaufruf dermaßen zerschossen hatten, daß ein
MR>weiterarbeiten nicht möglich war.

Ich habe keine Erfahrung mit dem konkreten Problem oder dem C Set++,
allerdings habe ich eine Idee.
Könnte es sein, daß Du irgendeine Library verwendest, die nicht reentrant
ist? Wenn ja, dann könnte es Dir weiterhelfen, Dir entweder eine
multithreadingfeste Version davon zu besorgen oder die Ein-Ausgabe in das
Logfile durch direkte Systemaufrufe statt über printf() zu machen.

Ciao, Matthias

Markus Ronneberger

unread,
Mar 27, 1998, 3:00:00 AM3/27/98
to

Hallo Matthias,

>Ich habe keine Erfahrung mit dem konkreten Problem oder dem C Set++,
>allerdings habe ich eine Idee.
>Könnte es sein, daß Du irgendeine Library verwendest, die nicht reentrant
>ist? Wenn ja, dann könnte es Dir weiterhelfen, Dir entweder eine
>multithreadingfeste Version davon zu besorgen oder die Ein-Ausgabe in das
>Logfile durch direkte Systemaufrufe statt über printf() zu machen.


Was die multithreadfeste LIB angeht, könnte es, daß ich sowas verwende, aber
wie stelle ich das fest?
Die Logfiles ansich sind aber nicht das Problem, weil das Schreiben ja
fehlerfrei funktioniert, wenn eine Exception auftritt. Problem ist nur, das
der Exceptionhandler nur durch seine Anwesenheit andere Funktionen zu
Absturz bringt, was sie ohne EH nicht tun. ?!?

Ich denke die Frage bleibt warscheinlich, was ist an den Libs, die ich für
dieses Projekt verwendet habe anders als an den Libs früherer Projekte, die
trotz EH einwandfrei laufen?

Danke Dir aber erst einmal,
Markus

Armin Horst

unread,
Mar 27, 1998, 3:00:00 AM3/27/98
to

Hi,
MR>Ich hoffe hier kann mir irgendjemand weiterhelfen.
Ich(wir) haben bei unserem Maustausch-Programm recht gute Erfahrungen mit einer
fertigen Library(inklusive Sourcen!) gemacht, die unter EXCEPT3.ZIP auf
LEO(/pub/comp/os/os2/leo/programming oder so ähnlich) zu finden sein müßte.
Den haben wir fast unverändert übernommen und noch um die Ausgabe einiger für
uns interessanter Variablen ergänzt.
Funktioniert ohne Probleme, kann den Stack auf verschiedene Arten ausgeben,
z.B. nur Adressen oder inklusive Funktionsnamen aus den mit MAPSYM erzeugten
Symbol-Files(seit der letzten Beta liefern wir diese an unsere Betatester aus)
oder inklusive Zeilennummern und Variableninhalten aus Debug-Infos(sofern
vorhanden).

Armin

0 new messages