5
TestFlight 특별 배포판에서만 발생하는 이상한 충돌이 있습니다. 나는 크래시를 일으키는 원인을 알고있다. (간단한 while 루프, 아래 참조), 시뮬레이터 나 iPhone 또는 iPad (개발 프로파일 포함)에서 크래시가 발생하지 않는 이유를 이해할 수 없다.iOS TestFlight Device에서 SIGSEGV 충돌이 발생했습니다.
저는 충돌을 추적하기 위해 끊임없이 임시 빌드를 배포하고 있지만 마침내 포기했습니다. 이 버그를보다 효과적으로 추적하려면 어떻게해야합니까?
다음은 TestFlight 충돌 보고서입니다 :
Exception reason
SIGSEGV
Stacktrace
PRIMARY THREAD THREAD 0
0 Meernotes 0x0019649a testflight_backtrace + 158
1 Meernotes 0x001970c4 TFSignalHandler + 244
2 libsystem_c.dylib 0x32d9d7ec _sigtramp + 48
3 libobjc.A.dylib 0x37d34eac _ZN12_GLOBAL__N_119AutoreleasePoolPage3popEPv + 224
4 libobjc.A.dylib 0x37d34eac _ZN12_GLOBAL__N_119AutoreleasePoolPage3popEPv + 224
5 libobjc.A.dylib 0x37d34dc8 _objc_autoreleasePoolPop + 12
6 CoreFoundation 0x358e1cfe _CFAutoreleasePoolPop + 18
7 UIKit 0x333d5c92 _wrapRunLoopWithAutoreleasePoolHandler + 42
8 CoreFoundation 0x35965b1a __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 18
9 CoreFoundation 0x35963d56 __CFRunLoopDoObservers + 258
10 CoreFoundation 0x359640b0 __CFRunLoopRun + 760
11 CoreFoundation 0x358e74a4 CFRunLoopRunSpecific + 300
12 CoreFoundation 0x358e736c CFRunLoopRunInMode + 104
13 GraphicsServices 0x37583438 GSEventRunModal + 136
14 UIKit 0x333f3cd4 UIApplicationMain + 1080
15 Meernotes 0x000850da main (main.m:16)
16 Meernotes 0x0008508f start + 39
그리고 여기 트리거되는 코드이다 (그러나 시뮬레이터/아이폰에서 잘되는) :이 봐했다
while (textStillFits) {
textToBeKeptBeforeCutting = textToBeKept;
textToBeMovedBeforeCutting = textToBeMoved;
rangeCutOffPosition = [settings determineFirstCutOffRangeOfString:textToBeMoved];
textToBeKeptTemp = [textToBeMoved substringToIndex:rangeCutOffPosition.location];
textToBeMovedTemp = [textToBeMoved substringFromIndex:rangeCutOffPosition.location];
textToBeMoved = textToBeMovedTemp;
textToBeKept = [NSString stringWithFormat:@"%@%@", textToBeKept, textToBeKeptTemp];
NSUInteger l = [settings linesOfText:textToBeKept];
if (l > maxLines) {
textStillFits = NO;
textToBeKept = textToBeKeptBeforeCutting;
textToBeMoved = textToBeMovedBeforeCutting;
// brakes here!
}else {
textStillFits = YES;
}
}
하지만 도움이되지 않았다 :
ad hoc iphone sigsegv crash
좀 더 상황을 @ott가 NSNotFound이 발생할 수 있음을 언급 한 바와 같이 :
-(NSRange)determineFirstCutOffRangeOfString:(NSString *)s {
NSRange rangeSpace = [s rangeOfString:@" " options:NSCaseInsensitiveSearch];
NSRange rangeReturn = [s rangeOfString:@"\n" options:NSCaseInsensitiveSearch];
if (rangeSpace.location == NSNotFound && rangeReturn.location == NSNotFound) {
rangeSpace = NSMakeRange(1, 0); // don't take 0,0 as this will lead to endless loop
rangeReturn = NSMakeRange(1, 0);
NSLog(@"NEITHER SPACE NOR RETURN FOUND");
}
NSRange rangeCutOffPosition = NSMakeRange(0, 0);
if (rangeSpace.location < rangeReturn.location) {
// i.e. if the space char is the lowest char where you can cut off
rangeCutOffPosition = NSMakeRange(rangeSpace.location+1,0); // +1, i.e. always cut off AFTER the space
} else {
// i.e. if the return char is the lowest char where you can cut off
rangeCutOffPosition = NSMakeRange(rangeReturn.location+1,0); // +1, i.e. always cut off AFTER the return
}
return rangeCutOffPosition;
}
'rangeCutOffPosition'이'NotFound'와 같이 될 수 있습니까? 이 장치는 시뮬레이터가 무시하는 곳에서 보통 까다 롭습니다. NSLog()를 삽입하여 진행 상황을 확인하거나 단계별로 진행할 수 있습니까? –
@ott 항상 NSRange를 초기화합니다. rangeCutOffPosition = NSMakeRange (0, 0); 그래서 NSNotFound가 될 수 없습니다. 그러나 일부 다른 범위를 확인하기 전에이 메서드를 몇 가지 있고 NSNotFound 반환 할 수 있습니다. 그러나 이것이 어떻게 문제가 될 수 있습니까? –
@ott 위 코드 컨텍스트를 좀 더 제공했습니다. 당신의 도움을 주셔서 감사합니다! –