Error vermeiden
-
Ist es möglich Fehlermeldungen zu vermeiden oder selbst eine Error-Routine dazu schreiben?
Ich meine Fehler, wie "Access Violation" oder ähnliches. in meinem Projekt ist es gewollt auf verschiedenste RAM-Regionen zuzugreifen. Bei einer Zugriffsverletzung soll aber keine Message kommen und mein Programm zwingend beendet werden, sondern mein Programm soll auf diesen Fehler reagieren können.
aus meiner alten Basic-Zeit weiß ich, dass es in Basic recht einfach war:
on error goto asdfheimschmiede
-
Ich weiß nicht genau, evnt funktioniert das über die signal() Funktion
man 2 signal
NAME signal - ANSI C signal handling SYNOPSIS #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); DESCRIPTION The signal() system call installs a new signal handler for the signal with number signum. The signal handler is set to sighandler which may be a user specified function, or either SIG_IGN or SIG_DFL. ...
-
access violations werden aber vom prozessor geschmissen, weil du auf fremden speicher zugreifen willst. laesst sich schlecht abfangen.
was willst du ueberhaupt machen?
bedenke, dass es sehr wahrscheinlich eh nicht geht.wenn du unter windows fremden prozessspeicher auslesen und beschreiben willst, helfen nur api calls.
-
naja, mein Ziel war es ein zweites Programm zur Überprüfung von Daten zu schreiben. Aussehen sollte dies wie folgt:
mein Hauptprogramm startet und ruft dabei ein zweites Programm auf, an welches die Adressen von verschiedenen Variablen übergeben wird. Das Hauptprogramm läuft dauerhaft weiter und das zweite Programm überprüft die Daten und bringt sie für mich auf den Bildschirm. Bei dem Fall von Zugriffsverletzungen gibt mein 2.Programm dann bspw aus: "unbekannt". Ist zwar ein bischen tricky, aber so sah zumindest mein Ansatz aus.
Wenn der Prozessor die Anfrage auf geschützten RAM wegwirft, tritt doch mit Sicherheit irgendein Fehler auf. Windows fängt ja den Fehler auf und erzeugt ja die Fehlermeldung und verursacht den Abbruch des Programms, oder irre ich mich da?
Aber wie sieht es mit anderen Fehlern aus? Kann man wirklich nicht Fehler unterschiedlichster Art abfangen?
heimschmiede
-
du willst Interprozesskommunikation
-
ja, so ähnlich sollte es werden.
ich bin aber eben einfach daran hängen geblieben, weil es eine Reaktion auf Fehler ist. Ich dachte es gäbe etwas, womit man solche schwerwiegeneden Fehler abfängt um darauf entsprechend reagieren zu können. anscheinend gibt es keine Möglichkeit. schade...
wo geschieht denn die Rechtevergabe von RAM-Segmenten? ist dafür das Betriebssystem zuständig?
heimschmiede
-
Du kannst alle Fehler abfangen, denn so solls eigentlich sein. Schau dir doch mal die signal.h an, bzw die Doku dazu. Da stehen alle drin.
http://www.cppreference.com/stdother/signal.htmlAber warum rufst du ein zweites programm auf?? Nimm doch einfach einen zweiten Thread. Was für Gründe hast du ein eigenständiges Programm dafür zu verwenden??
rya.
Scorcher24
-
Klar geht das, such mal nach dem Stichwort SetUnhandledExceptionFilter()
Interessante Infos findest du unter codeproject, z.B.:
http://www.codeproject.com/debug/crash_report.asp
-
ich werd mal in die signal reinschaun. vieleicht finde ich da was.
einen richtigen Grund weiß ich auch so ganz, aber es hat mich schon immer fasziniert, wie man Programm-übergreifend Daten kontrolieren kann. Ansosnten gebe ich mir die Daten auch im normalen Programm aus. Hängt bspw ein Prog, dann funzt aber die Ausgabe von Variablen weiterhin. dagegen steht natürlich der Debugger, aber das ganze klappt dann aúch im fertig kompiliertem Prog.
ich wollt schon lange mal sowas gemacht haben...
heimschmiede
-
Natürlich ist diese Lösung windows-only.