Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';“例外代码”的含义是什么;EXC“I386”GPFLT;?_C++_C_Exc Bad Access - Fatal编程技术网

C++ 什么';“例外代码”的含义是什么;EXC“I386”GPFLT;?

C++ 什么';“例外代码”的含义是什么;EXC“I386”GPFLT;?,c++,c,exc-bad-access,C++,C,Exc Bad Access,异常代码的含义是什么 它的含义是否因情况而异 在这种情况下,我指的是异常类型EXC\u BAD\u ACCESS和异常代码EXC\u I386\u GPFLT 该程序是在Xcode 5.0.1中开发的,处理BLAS库的cblas_zgemm() 多谢各位 您通常可以从头文件中获取信息。例如: $ cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk

异常代码的含义是什么

它的含义是否因情况而异

在这种情况下,我指的是异常类型
EXC\u BAD\u ACCESS
和异常代码
EXC\u I386\u GPFLT

该程序是在Xcode 5.0.1中开发的,处理BLAS库的
cblas_zgemm()


多谢各位

您通常可以从头文件中获取信息。例如:

$ cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk
$ find usr -name \*.h -exec fgrep -l EXC_I386_GPFLT {} \;
usr/include/mach/i386/exception.h
^C
$ more usr/include/mach/i386/exception.h
....
#define EXC_I386_GPFLT          13      /* general protection fault     */
好的,这是一个一般性的保护故障(顾名思义)。谷歌搜索“i386通用保护故障”会产生很多点击,但这很有趣:

内存保护也使用段描述符实现。 首先,处理器检查段中是否加载了值 寄存器引用有效的描述符。然后检查每个 计算的线性地址实际上位于段内。此外, 访问类型(读、写或执行)根据 段描述符中的信息。只要有一张支票 失败,引发异常(中断)13(十六进制0D)。这个例外是 称为一般保护故障(GPF)


这个
13
与我们在头文件中看到的内容相匹配,所以看起来是一样的。然而,从应用程序程序员的角度来看,这只是意味着我们引用了我们不应该使用的内存,并且它在硬件上的实现方式并不重要。

EXC\u I386\u GPFLT肯定是指“一般保护故障”,这是x86告诉您“您做了不允许做的事情”。这通常并不意味着访问超出内存界限,但可能是代码超出了界限,导致错误代码/数据的使用方式导致某种保护冲突

不幸的是,如果没有更多的上下文,就很难准确地找出问题所在,在我的AMD64程序员手册(2005年第2卷)中列出了27种不同的原因——据所有人说,8年后可能还会增加一些

如果它是一个64位系统,一个合理的场景是您的代码使用了“非规范指针”——这意味着64位地址的形成方式是,地址的上16位并非都是下48位顶部的副本(换言之,地址的前16位应全部为0或全部为1,基于刚好低于16位的位)。此规则用于确保体系结构可以“安全地扩展地址范围内的有效位数”。这表示代码正在用其他内容覆盖某些指针数据,或者在读取某些指针值时超出了范围

另一个可能的原因是与SSE寄存器未对齐的访问-换句话说,从未对齐16字节的地址读取16字节的SSE寄存器


正如我所说,还有许多其他可能的原因,但其中大多数都涉及到“正常”代码在32位或64位操作系统中不会执行的操作(例如加载具有无效选择器索引的段寄存器或写入MSR(特定于模型的寄存器))。

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


希望有帮助!

我想知道为什么在单元测试中会出现这种情况

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


结果是⌘K clean做到了这一点。解决实际问题时,我总是手忙脚乱。

在我的例子中,错误是在iOS模拟器上运行应用程序时在Xcode中抛出的。虽然我无法回答“错误意味着什么”这一特定问题,但我可以说是什么帮助了我,也许它也帮助了其他人


我的解决方案是
删除模拟器中的所有内容和设置
,并
清除Xcode中的构建文件夹…

这发生在我身上,因为Xcode似乎不喜欢我在两个不同的类中使用相同的变量名(如果这很重要的话,它符合相同的协议,尽管变量名在任何协议中都不相关)


在调试过程中,我不得不进入它崩溃的设置器,以便查看它。这个答案适用于iOS。我在Swift 4.2上遇到了类似的异常。我花了大约半个小时试图在代码中找到一个bug,但在关闭Xcode并删除派生数据文件夹后,问题就消失了。下面是快捷方式:

rm -rf ~/Library/Developer/Xcode/DerivedData

如果在将
self
定义为
unowned
的闭包中抛出错误,则在某些情况下,您可以访问的内容可能会受到限制,并且会获得此错误代码。特别是在调试时。如果是这种情况,请尝试将
[unowned self]
更改为
[弱self]

我在执行此操作时出错:

 NSMutableDictionary *aDictionary=[[NSMutableDictionary alloc] initWithObjectsAndKeys:<#(nonnull id), ...#>, nil]; //with 17 objects and keys

我在离开视图时遇到了这个问题(返回到上一个视图)

原因是

addSubview(view)
view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    view.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor),
    view.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor),
    view.trailingAnchor.constraint(equalTo: safeAreaLayoutGuide.trailingAnchor),
    view.bottomAnchor.constraint(equalTo: safeAreaLayoutGuide.bottomAnchor)
])
safeAreaLayoutGuide
更改为
self
解决问题


意思是将视图与superview的前导、尾随、顶部、底部对齐,而不是与安全区域对齐)

对于我来说,这是一个与故事板相关的问题,在iOS 9.0及更高版本中有一个ViewController构建选项,而之前的iOS 10.0及更高版本中有此选项。实际上,我想将版本从10降级到iOS 9.3。

我看到这个错误代码在Xcode 12.0 Beta 6上循环崩溃,仅在iOS 14模拟器上。它不会在我的真实设备上崩溃尽管是iOS 13!所以如果你在运行测试版的东西
addSubview(view)
view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    view.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor),
    view.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor),
    view.trailingAnchor.constraint(equalTo: safeAreaLayoutGuide.trailingAnchor),
    view.bottomAnchor.constraint(equalTo: safeAreaLayoutGuide.bottomAnchor)
])
let ptr = rawptr.assumingMemoryBound(to: A.self) //<-- wrong A.self Change it to B.Self
ptr.pointee = B()
- (CppStructure)cppStructure
{
    CppStructure data;
    data.a = self.alpha;
    data.b = self.beta;

    return data; // this line was missing
}