SEGV_ACCERR是什么意思?

Sal*_*ule 27 c c++ signals objective-c

我正在检查一些崩溃,所有崩溃都有SIGSEGV信号,原因是SEGV_ACCERR.在搜索SEGV_ACCERR之后,我发现最接近人类可读解释的是:对象的无效权限

这在更一般意义上意味着什么?何时出现SEGV_ACCERR?关于这个原因有更具体的文件吗?

jjx*_*tra 17

这是我在64位iOS设备上看到的错误,如果多个线程读取并更改ARC下的变量,则会发生这种错误.例如,我今天修复了一个崩溃,其中多个后台线程正在读取并使用静态NSDate和NSString变量并更新它们而不进行任何类型的锁定或排队.

在多个线程上使用核心数据对象也可能导致此崩溃,正如我在崩溃日志中多次看到的那样.

我也使用Crittercism,这个特殊的崩溃是一个只影响64位设备的SEGV_ACCERR.


ger*_*and 6

sigaction的手册页所述,SEGV_ACCERR是 SIGSEGV 的信号代码,用于指定映射对象的无效权限。与表示地址未映射到有效对象的 SEGV_MAPERR 相反,SEGV_ACCERR 表示地址与对象匹配,但可以肯定它既不是好的对象,也不是允许进程访问的对象。

  • 不要混淆:这里的“对象”并不意味着 Swift、Obj-C 或 C++ 对象,它意味着内核内存对象,即一系列地址空间。该错误意味着某些东西试图以不允许的方式使用内存地址,即写入只读内存或从不可执行的内存执行代码。 (4认同)

小智 5

我在代码尝试从“文本”以外的地方执行的情况下看到过这种情况。

例如,如果您的指针指向堆或堆栈中的函数,并且您尝试执行该代码(从堆或堆栈),CPU 会抛出此异常。