首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >异常代码"EXC_I386_GPFLT“是什么意思?

异常代码"EXC_I386_GPFLT“是什么意思?
EN

Stack Overflow用户
提问于 2013-10-29 15:06:55
回答 14查看 110.8K关注 0票数 129

异常代码EXC_I386_GPFLT的含义是什么

它的意思会因情况而异吗?

在这种情况下,我指的是异常代码为EXC_I386_GPFLT的异常类型EXC_BAD_ACCESS

该程序是用Xcode5.0.1开发的,处理BLAS库的cblas_zgemm()

非常感谢!

EN

回答 14

Stack Overflow用户

发布于 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(特定于型号的寄存器))。

票数 122
EN

Stack Overflow用户

发布于 2015-04-30 20:46:28

要调试并找到源代码:为应用程序启用僵尸(产品\方案)并启动仪器,选择僵尸。在Xcode中运行你的应用程序,然后转到Instruments开始录制。返回到您的应用程序并尝试生成错误。仪器应该检测到(对僵尸的)错误调用(如果有)。

希望它能帮上忙!

票数 28
EN

Stack Overflow用户

发布于 2015-10-10 21:44:07

我想知道为什么它会出现在我的单元测试中。

我已经向一个包含throws的协议添加了一个方法声明;但是这个潜在的抛出方法甚至没有在那个特定的测试中使用。在测试中启用僵尸听起来太麻烦了。

事实证明,⌘K clean做到了这一点。当它解决实际问题时,我总是大吃一惊。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19651788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档