Ungefähr ist der Code:Gibt es eine Möglichkeit, den Zeiger zu erhalten, auf den während der Behandlung eines Signals zugegriffen wurde? diese
#include <signal.h>
void SegmentationFaultHandler(int signal) {
if (signal == SIGSEGV) {
// how to check here if it's actual null pointer?
Throw(NullPointerException, "Object pointer not set to an instance of an object.");
}
else
Throw(InvalidOperationException, "Signal has been intercepted by wrong function.");
}
int main() {
signal(SIGSEGV, SegmentationFaultHandler);
try {
int *i = null;
*i = 0;
...
Wie kann ich überprüfen, ob ich nicht einen Zeiger überprüfen hat verdoppeln, oder einfach nur zugegriffen nicht initialisierte Daten und Ehrerbietung es?
Ich weiß, dass es möglich ist, weil Debugger wissen, auf welche Adresse das Programm zuzugreifen versuchte.
Ich glaube nicht, dass die Debugger auf diese Weise arbeiten. – Boiethios
@Boiethios Debugger arbeiten, indem sie Signale überschreiben und dann schlechte Anweisungen anlegen, um Breakpoints zu erzeugen (?) – LyingOnTheSky
Vielleicht können Sie stattdessen 'sigaction' verwenden? –