异常代码EXC_I386_GPFLT
的含义是什么
它的意思会因情况而异吗?
在这种情况下,我指的是异常代码为EXC_I386_GPFLT
的异常类型EXC_BAD_ACCESS
该程序是用Xcode5.0.1开发的,处理BLAS库的cblas_zgemm()
。
非常感谢!
发布于 2013-10-29 15:34:41
EXC_I386_GPFLT肯定指的是“一般保护错误”,这是x86告诉你“你做了不允许你做的事情”的方式。这通常并不意味着您的访问超出了内存界限,但它可能是您的代码超出了界限,并导致以某种形式的保护冲突的方式使用错误的代码/数据。
不幸的是,在没有更多上下文的情况下,很难准确地找出问题是什么,在我的AMD64程序员手册,2005年第2卷中列出了27种不同的原因-所有人都说,8年后可能会增加更多的原因。
如果它是一个64位系统,一个合理的场景是你的代码使用了一个“非规范指针”--这意味着64位地址的构成方式是,地址的高16位不是低48位的所有副本(换句话说,地址的高16位应该都是0或全1,基于16位以下的位)。这条规则是为了保证体系结构可以“安全地扩展地址范围内的有效位数”。这将表明代码要么使用其他内容覆盖某些指针数据,要么在读取某些指针值时越界。
另一个可能的原因是对SSE寄存器的未对齐访问-换句话说,从不是16字节对齐的地址读取16字节的SSE寄存器。
正如我所说,还有许多其他可能的原因,但其中大多数都涉及“正常”代码在32位或64位操作系统中不会做的事情(例如,使用无效的选择器索引加载段寄存器或写入MSR(特定于型号的寄存器))。
发布于 2015-04-30 20:46:28
要调试并找到源代码:为应用程序启用僵尸(产品\方案)并启动仪器,选择僵尸。在Xcode中运行你的应用程序,然后转到Instruments开始录制。返回到您的应用程序并尝试生成错误。仪器应该检测到(对僵尸的)错误调用(如果有)。
希望它能帮上忙!
发布于 2015-10-10 21:44:07
我想知道为什么它会出现在我的单元测试中。
我已经向一个包含throws
的协议添加了一个方法声明;但是这个潜在的抛出方法甚至没有在那个特定的测试中使用。在测试中启用僵尸听起来太麻烦了。
事实证明,⌘K clean做到了这一点。当它解决实际问题时,我总是大吃一惊。
https://stackoverflow.com/questions/19651788
复制相似问题