2013-11-02 126 views

Trả lời

22

Mã = 1 là KERN_INVALID_ADDRESS và mã = ​​2 là KERN_PROTECTION_FAILURE. Cả hai đều là giải thích trong "Technical Note TN2123 CrashReporter":

Các hình thức phổ biến nhất của ngoại lệ là:

  • EXC_BAD_ACCESS/KERN_INVALID_ADDRESS - Điều này là do sợi truy cập vào bộ nhớ unmapped. Nó có thể được kích hoạt bằng cách truy cập dữ liệu hoặc tìm nạp lệnh; phần Tiểu bang Đề xuất mô tả cách thức cho biết sự khác biệt.
  • EXC_BAD_ACCESS/KERN_PROTECTION_FAILURE - Đây là do chủ đề cố gắng ghi vào bộ nhớ chỉ đọc. Đây là luôn do truy cập dữ liệu gây ra.

Các mã được định nghĩa trong <mach/kern_return.h>:

#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. 
       */ 

và trong <mach/exception_types.h> nó được ghi chép lại rằng mã cho một EXC_BAD_ACCESS là một kern_return_t:

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

Về Unix, nó cùng phân biệt với SIGBUS và SIGSEGV. –

Các vấn đề liên quan