[英]SIGSEGV Crash on iOS TestFlight Device
我有一個奇怪的崩潰,只發生在TestFlight ad hoc發行版上。 我知道導致崩潰的原因(簡單的循環,見下文),但我不明白為什么它不會在我的模擬器上崩潰,也不會在iPhone或iPad(帶有開發配置文件)上崩潰。
我不斷發布adhoc構建來追蹤崩潰,但我終於放棄了。 如何更有效地跟蹤此錯誤?
這是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
這是觸發它的代碼(但在模擬器/ iphone上沒問題):
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崩潰
更多上下文,正如@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;
}
他們最新的sdk 1.2.4解決了這個問題!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.