2013-11-02 12 views

Antwort

22

Code = 1 ist KERN_INVALID_ADDRESS und Code = 2 ist KERN_PROTECTION_FAILURE. Beide sind in der "Technical Note TN2123 CrashReporter" erläutert:

Die häufigsten Formen der Ausnahme sind:

  • EXC_BAD_ACCESS/KERN_INVALID_ADDRESS - dies ist durch das Gewinde verursacht Zugriff unmapped Speicher. Es kann entweder durch einen Datenzugriff oder einen Befehlsabruf ausgelöst werden; Der Thread State Abschnitt beschreibt, wie man den Unterschied zu sagen kann.
  • EXC_BAD_ACCESS/KERN_PROTECTION_FAILURE - Dies ist , verursacht durch den Thread, der versucht, in den Nur-Lese-Speicher zu schreiben. Dies ist immer durch einen Datenzugriff verursacht.

Die Codes sind in <mach/kern_return.h> definiert:

#define KERN_INVALID_ADDRESS   1 
       /* Specified address is not currently valid. 
       */ 

#define KERN_PROTECTION_FAILURE   2 
       /* Specified memory is valid, but does not permit the 
       * required forms of access. 
       */ 

und in <mach/exception_types.h> wird dokumentiert, dass der Code für eine EXC_BAD_ACCESS ein kern_return_t ist:

#define EXC_BAD_ACCESS   1  /* Could not access memory */ 
       /* Code contains kern_return_t describing error. */ 
       /* Subcode contains bad memory address. */ 
+1

In Unix Bedingungen, es ist die gleiche Unterscheidung wie SIGBUS und SIGSEGV. –

Verwandte Themen