예외 코드 "EXC_I386_GPFLT"의 의미는 무엇입니까?
예외 코드의 의미는 무엇입니까?EXC_I386_GPFLT
?
상황에 따라 의미가 달라집니까?
이 경우 예외 유형을 말합니다.EXC_BAD_ACCESS
예외 코드 포함EXC_I386_GPFLT
이 프로그램은 Xcode 5.0.1로 개발되어 있으며,cblas_zgemm()
BLAS 라이브러리의(글쎄, 그건 상관없을 것 같은데...)
정말 감사합니다!
EXC_I386_GPFLT는 "General Protection fault(일반 보호 장애)"를 의미하며, 이는 x86이 "사용할 수 없는 작업을 수행했습니다"라고 알려주는 방법입니다.일반적으로 메모리 범위를 벗어나 액세스한다는 의미는 아니지만, 코드가 범위를 벗어나 잘못된 코드/데이터를 사용하여 일종의 보호 위반을 일으킬 수 있습니다.
유감스럽게도 더 많은 컨텍스트가 없으면 문제의 정확한 원인을 파악하기가 어렵습니다. AMD64 프로그래머 매뉴얼, Vol 2(2005년)에는 27개의 다른 원인이 기재되어 있습니다.어느 모로 보나 8년 후에는 몇 개 더 추가되었을 가능성이 높습니다.
64비트 시스템의 경우 코드가 "비표준 포인터"를 사용하고 있는 경우가 있습니다.즉, 64비트 주소는 하위 48비트의 상위 16비트가 모두 복사되지 않도록 형성됩니다(즉, 주소의 상위 16비트는 모두 0 또는 모두 16bi 바로 아래의 비트에 근거해 1이어야 합니다).ts) 이 규칙은 아키텍처가 "주소 범위 내의 유효한 비트 수를 안전하게 확장할 수 있도록 하기 위한 것입니다.이는 코드가 일부 포인터 데이터를 다른 데이터로 덮어쓰거나 일부 포인터 값을 읽을 때 범위를 벗어났음을 나타냅니다.
SSE 레지스터와의 정렬되지 않은 액세스, 즉 16바이트가 정렬되지 않은 주소에서 16바이트 SSE 레지스터를 읽는 것도 생각할 수 있는 원인입니다.
그 밖에도 여러 가지 이유가 있을 수 있지만, 그 대부분은 32비트 또는 64비트 OS에서는 "일반" 코드가 할 수 없는 것(예: 비활성 셀렉터 인덱스로 세그먼트 레지스터를 로드하거나 MSR(모델 고유의 레지스터)에 쓰는 것)과 관련되어 있습니다.
유닛 테스트 때 왜 이런 게 나왔는지 궁금했어요.
다음을 포함하는 프로토콜에 메서드 선언을 추가했습니다.throws
그러나 잠재적인 투척 방법은 그 특정 테스트에서조차 사용되지 않았다.테스트에서 좀비를 활성화하는 것은 너무 어려운 일인 것 같습니다.
K파운드짜리 청소가 효과가 있더군요나는 그것이 실제 문제를 해결할 때 항상 깜짝 놀란다.
소스를 디버깅하여 검색하려면:앱 좀비 활성화(제품\)Scheme)와 Launch Instruments를 선택하고 Zombies를 선택합니다.앱을 Xcode로 실행한 다음 Instruments로 이동하여 녹음을 시작합니다.앱으로 돌아가서 오류를 생성해 보십시오.(좀비에 대한) 잘못된 콜이 있는 경우 계측기가 이를 감지해야 합니다.
도움이 됐으면 좋겠다!
Swift 4.2에서도 비슷한 예외가 있었습니다.코드의 버그를 찾으려고 30분 정도 걸렸지만 Xcode를 닫고 파생 데이터 폴더를 삭제한 후 문제가 사라졌습니다.단축키는 다음과 같습니다.
rm -rf ~/Library/Developer/Xcode/DerivedData
대부분의 경우 헤더 파일에서 정보를 얻을 수 있습니다.예를 들어 다음과 같습니다.
$ 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(16진수 0D)이 발생합니다.이 예외를 General Protection Fault(GPF; 일반 보호 장애)라고 부릅니다.
그거13
헤더 파일에서 본 것과 일치하기 때문에 동일한 것으로 보입니다.다만, 애플리케이션 프로그래머의 관점에서는, 이것은 우리가 있어서는 안 되는 메모리를 참조하고 있는 것을 의미할 뿐이며, 하드웨어에 어떻게 실장되어 있는지는 그다지 중요하지 않습니다.
제 경우 iOS 시뮬레이터에서 앱을 실행할 때 Xcode로 에러가 발생하였습니다.'오류가 무엇을 의미하느냐'는 구체적인 질문에는 대답할 수 없지만, 무엇이 도움이 되었는지는 말할 수 있고, 다른 사람에게도 도움이 될 수 있습니다.
저의 해결책은Erase All Content and Settings
시뮬레이터와 로Clean Build Folder...
Xcode로 표시됩니다.
보기를 남길 때 이 문제가 발생했습니다(이전 보기로 팝백).
그 이유는 가지고 있었기 때문이다
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
문제를 해결하다
뷰는 안전한 영역이 아닌 슈퍼뷰의 선두, 후행, 상단, 하단과 정렬됩니다.)
스토리보드 관련 문제에는 iOS 9.0용 ViewController 빌드 옵션과 iOS 10.0 이후용으로 설정된 옵션이 있습니다.사실 10에서 iOS 9.3으로 버전을 다운그레이드하고 싶습니다.
이것은 Xcode가 두 개의 다른 클래스에서 동일한 변수 이름을 사용하는 것을 좋아하지 않는 것처럼 보였기 때문에 일어났다(변수 이름은 프로토콜과 관련이 없지만 중요한 경우 동일한 프로토콜에 부합한다).새 변수의 이름을 간단히 바꿨습니다.
디버깅을 하면서 그걸 보기 위해 세터 안으로 들어가야 했어요.이 답변은 iOS에 적용됩니다.
에러가 다음 항목을 정의하는 클로저 내에 삽입된 경우self
~하듯이unowned
에러 코드는, 액세스 할 수 있는 범위가 한정되어 있는 경우가 있어, 상황에 따라서는 이 에러 코드가 표시됩니다.특히 디버깅 중에.이 경우 변경해 보십시오.[unowned self]
로.[weak self]
이 작업을 수행하는 동안 다음 오류가 발생했습니다.
NSMutableDictionary *aDictionary=[[NSMutableDictionary alloc] initWithObjectsAndKeys:<#(nonnull id), ...#>, nil]; //with 17 objects and keys
내가 다시 돌아왔을 때, 그것은 사라졌다:
NSMutableDictionary *aDictionary=[[NSMutableDictionary alloc] init];
[aDictionary setObject:object1 forKey:@"Key1"]; //17 times
Xcode 12.0 Beta 6에서는 iOS 14 시뮬레이터에서만 이 에러 코드가 교대로 크래시 됩니다.iOS 13을 실행하고 있는 내 실제 기기에서 크래쉬하지 않습니다!따라서 베타 버전을 실행하고 있고 시뮬레이터에서 회전 크래시가 발생하는 경우 iOS 버전이 아닌 실제 기기에서 실행할 필요가 있습니다.
이 에러가 발생할 수 있습니다.UnsafeMutablePointer
let ptr = rawptr.assumingMemoryBound(to: A.self) //<-- wrong A.self Change it to B.Self
ptr.pointee = B()
저 같은 경우에는EXC_I386_GPFLT
속성 getter의 반환값 누락으로 인해 발생하였습니다.다음과 같이 합니다.
- (CppStructure)cppStructure
{
CppStructure data;
data.a = self.alpha;
data.b = self.beta;
return data; // this line was missing
}
X코드 12.2
내 문제는 멍청한 X코드 놀이터였다.몇 년 전에 나온 이후로 놀이터가 불안정해서 애플이 너무 엉망이야.
파생 데이터 삭제 등은 도움이 되지 않고, 코드를 버리지 않는 유일한 방법은 앱 프로젝트에서 실행하는 것이었습니다.
언급URL : https://stackoverflow.com/questions/19651788/whats-the-meaning-of-exception-code-exc-i386-gpflt
'programing' 카테고리의 다른 글
vue.js 2 앱에서 커스텀 데코레이터를 글로벌하게 사용하려면 어떻게 해야 합니까? (0) | 2022.06.22 |
---|---|
C 매크로 값에서 char 문자열을 만드는 방법 (0) | 2022.06.22 |
로그인 상태를 확인하고 로그인하지 않은 경우 오버레이를 렌더링하고 로그인에 성공하면 계속합니다. (0) | 2022.06.22 |
Ubuntu에서 Android Studio를 설치할 수 없습니다. (0) | 2022.06.21 |
단일 비트를 설정, 삭제 및 전환하려면 어떻게 해야 합니까? (0) | 2022.06.21 |