我正在调试用户报告我们的应用程序从 iOS11 开始在后台反复退出,即使在主动使用期间也是如此(例如,用户将我们置于后台并在几秒或一分钟内返回,却发现它重新启动)。崩溃日志都揭示了相同的原因:看门狗超时。以下是此类崩溃日志中的相关内容:
Exception Type: EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace <0xF>, Code 0x8badf00d
Triggered by Thread: 0
我意识到我们的代码在接收推送通知或后台运行时的运行时间有限。我们确实使用 UIBackgroundTasks(使用 Alamofire Networking,FWIW),并且我们确实有执行此操作的过期处理程序:
backgroundTask = [application beginBackgroundTaskWithExpirationHandler:^{
[application endBackgroundTask:backgroundTask];
backgroundTask = UIBackgroundTaskInvalid; // Set the task to be invalid
DebugLog(@"Ended because expiration");
}];
这些崩溃报告最令人困惑的是我们的代码在堆栈中无处可寻。从this Apple discussion of the 0x8badf00d exception code可以看出,实际上,有问题的代码正在主线程上主动执行。
但是,在我的例子中,没有任何堆栈执行过我的任何代码。这是一个代表性示例:
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x0000000183208bc4 0x183208000 + 3012
1 libsystem_kernel.dylib 0x0000000183208a3c 0x183208000 + 2620
2 CoreFoundation 0x00000001836b9c4c 0x1835d0000 + 957516
3 CoreFoundation 0x00000001836b7818 0x1835d0000 + 948248
4 CoreFoundation 0x00000001835d7e78 0x1835d0000 + 32376
5 GraphicsServices 0x000000018546cf84 0x185462000 + 44932
6 UIKit 0x000000018d37a0bc 0x18d307000 + 471228
7 MyApp 0x0000000102a6572c main + 87852 (main.m:22)
8 libdyld.dylib 0x00000001830fa56c 0x1830f9000 + 5484
Thread 1 name: com.apple.uikit.eventfetch-thread
Thread 1:
0 libsystem_kernel.dylib 0x0000000183208bc4 0x183208000 + 3012
1 libsystem_kernel.dylib 0x0000000183208a3c 0x183208000 + 2620
2 CoreFoundation 0x00000001836b9c4c 0x1835d0000 + 957516
3 CoreFoundation 0x00000001836b7818 0x1835d0000 + 948248
4 CoreFoundation 0x00000001835d7e78 0x1835d0000 + 32376
5 Foundation 0x00000001840006e4 0x183ff4000 + 50916
6 Foundation 0x000000018401fafc 0x183ff4000 + 178940
7 UIKit 0x000000018ded9630 0x18d307000 + 12396080
8 Foundation 0x0000000184101860 0x183ff4000 + 1103968
9 libsystem_pthread.dylib 0x000000018333c31c 0x18333a000 + 8988
10 libsystem_pthread.dylib 0x000000018333c1e8 0x18333a000 + 8680
11 libsystem_pthread.dylib 0x000000018333ac28 0x18333a000 + 3112
Thread 2 name: com.twitter.crashlytics.ios.MachExceptionServer
Thread 2:
0 libsystem_kernel.dylib 0x0000000183208bc4 0x183208000 + 3012
1 libsystem_kernel.dylib 0x0000000183208a3c 0x183208000 + 2620
2 MyApp 0x0000000102cdaad8 CLSMachExceptionServer + 100
3 libsystem_pthread.dylib 0x000000018333c31c 0x18333a000 + 8988
4 libsystem_pthread.dylib 0x000000018333c1e8 0x18333a000 + 8680
5 libsystem_pthread.dylib 0x000000018333ac28 0x18333a000 + 3112
Thread 3 name: com.apple.NSURLConnectionLoader
Thread 3:
0 libsystem_kernel.dylib 0x0000000183208bc4 0x183208000 + 3012
1 libsystem_kernel.dylib 0x0000000183208a3c 0x183208000 + 2620
2 CoreFoundation 0x00000001836b9c4c 0x1835d0000 + 957516
3 CoreFoundation 0x00000001836b7818 0x1835d0000 + 948248
4 CoreFoundation 0x00000001835d7e78 0x1835d0000 + 32376
5 CFNetwork 0x0000000183d41de0 0x183c93000 + 716256
6 Foundation 0x0000000184101860 0x183ff4000 + 1103968
7 libsystem_pthread.dylib 0x000000018333c31c 0x18333a000 + 8988
8 libsystem_pthread.dylib 0x000000018333c1e8 0x18333a000 + 8680
9 libsystem_pthread.dylib 0x000000018333ac28 0x18333a000 + 3112
Thread 4 name: AVAudioSession Notify Thread
Thread 4:
0 libsystem_kernel.dylib 0x0000000183208bc4 0x183208000 + 3012
1 libsystem_kernel.dylib 0x0000000183208a3c 0x183208000 + 2620
2 CoreFoundation 0x00000001836b9c4c 0x1835d0000 + 957516
3 CoreFoundation 0x00000001836b7818 0x1835d0000 + 948248
4 CoreFoundation 0x00000001835d7e78 0x1835d0000 + 32376
5 AVFAudio 0x0000000189615774 0x189591000 + 542580
6 AVFAudio 0x0000000189640018 0x189591000 + 716824
7 libsystem_pthread.dylib 0x000000018333c31c 0x18333a000 + 8988
8 libsystem_pthread.dylib 0x000000018333c1e8 0x18333a000 + 8680
9 libsystem_pthread.dylib 0x000000018333ac28 0x18333a000 + 3112
Thread 5:
0 libsystem_kernel.dylib 0x0000000183229150 0x183208000 + 135504
1 libsystem_pthread.dylib 0x000000018333ed30 0x18333a000 + 19760
2 libc++.1.dylib 0x00000001828e3ea4 0x1828dc000 + 32420
3 JavaScriptCore 0x000000018b157d00 0x18a812000 + 9723136
4 JavaScriptCore 0x000000018b157c28 0x18a812000 + 9722920
5 JavaScriptCore 0x000000018b157f8c 0x18a812000 + 9723788
6 libsystem_pthread.dylib 0x000000018333c31c 0x18333a000 + 8988
7 libsystem_pthread.dylib 0x000000018333c1e8 0x18333a000 + 8680
8 libsystem_pthread.dylib 0x000000018333ac28 0x18333a000 + 3112
Thread 6 name: WebThread
Thread 6:
0 libsystem_kernel.dylib 0x0000000183208bc4 0x183208000 + 3012
1 libsystem_kernel.dylib 0x0000000183208a3c 0x183208000 + 2620
2 CoreFoundation 0x00000001836b9c4c 0x1835d0000 + 957516
3 CoreFoundation 0x00000001836b7818 0x1835d0000 + 948248
4 CoreFoundation 0x00000001835d7e78 0x1835d0000 + 32376
5 WebCore 0x000000018bc1c75c 0x18bbdb000 + 268124
6 libsystem_pthread.dylib 0x000000018333c31c 0x18333a000 + 8988
7 libsystem_pthread.dylib 0x000000018333c1e8 0x18333a000 + 8680
8 libsystem_pthread.dylib 0x000000018333ac28 0x18333a000 + 3112
Thread 7 name: WebCore: LocalStorage
Thread 7:
0 libsystem_kernel.dylib 0x0000000183229150 0x183208000 + 135504
1 libsystem_pthread.dylib 0x000000018333ed30 0x18333a000 + 19760
2 JavaScriptCore 0x000000018a81fa18 0x18a812000 + 55832
3 JavaScriptCore 0x000000018b13da04 0x18a812000 + 9615876
4 WebKitLegacy 0x000000018d00f5fc 0x18cf7c000 + 603644
5 WebKitLegacy 0x000000018d01226c 0x18cf7c000 + 615020
6 WebKitLegacy 0x000000018d011998 0x18cf7c000 + 612760
7 JavaScriptCore 0x000000018a81c010 0x18a812000 + 40976
8 JavaScriptCore 0x000000018a81bf50 0x18a812000 + 40784
9 libsystem_pthread.dylib 0x000000018333c31c 0x18333a000 + 8988
10 libsystem_pthread.dylib 0x000000018333c1e8 0x18333a000 + 8680
11 libsystem_pthread.dylib 0x000000018333ac28 0x18333a000 + 3112
Thread 8 name: com.apple.CFSocket.private
Thread 8:
0 libsystem_kernel.dylib 0x0000000183229570 0x183208000 + 136560
1 CoreFoundation 0x00000001836c2184 0x1835d0000 + 991620
2 libsystem_pthread.dylib 0x000000018333c31c 0x18333a000 + 8988
3 libsystem_pthread.dylib 0x000000018333c1e8 0x18333a000 + 8680
4 libsystem_pthread.dylib 0x000000018333ac28 0x18333a000 + 3112
Thread 9:
0 libsystem_pthread.dylib 0x000000018333ac1c 0x18333a000 + 3100
Thread 10:
0 libsystem_kernel.dylib 0x0000000183229dbc 0x183208000 + 138684
1 libsystem_pthread.dylib 0x000000018333afa0 0x18333a000 + 4000
2 libsystem_pthread.dylib 0x000000018333ac20 0x18333a000 + 3104
Thread 11:
0 libsystem_pthread.dylib 0x000000018333ac1c 0x18333a000 + 3100
Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x0000000010004005 x1: 0x0000000007000806 x2: 0x0000000000000000 x3: 0x0000000000000c00
x4: 0x0000000000002b03 x5: 0x00000000ffffffff x6: 0x0000000000000000 x7: 0x0000000000000000
x8: 0x00000000fffffbbf x9: 0x0000000007000000 x10: 0x0000000007000100 x11: 0x0000000000000040
x12: 0xffffffffffffffff x13: 0x0000000000000001 x14: 0x01e8540001e85400 x15: 0x0000000000000000
x16: 0xffffffffffffffe1 x17: 0x00000000ffffffff x18: 0x0000000000000000 x19: 0x0000000000000000
x20: 0x00000000ffffffff x21: 0x0000000000002b03 x22: 0x0000000000000c00 x23: 0x000000016d3aed38
x24: 0x0000000007000806 x25: 0x0000000000000000 x26: 0x0000000007000806 x27: 0x0000000000000c00
x28: 0x0000000000000001 fp: 0x000000016d3aec30 lr: 0x0000000183208a3c
sp: 0x000000016d3aebe0 pc: 0x0000000183208bc4 cpsr: 0x60000000
我的代码中唯一正在运行的部分是 main.m,第 22 行,即
int retVal = UIApplicationMain(argc, argv, nil, @"PSSMyAppDelegate");
因此,我很困惑我的应用程序为什么会因为违反运行时间而反复被杀死,而实际上我的代码似乎都没有在运行。 iOS 11 中有什么新东西可以改变看门狗进程的行为吗?如果不是,我如何判断我的代码的哪一部分是运行时间过长的违规部分?
最佳答案
您的线程 0 看起来很像我们在 iOS 11 中遇到的崩溃。这是我们的:
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x00000001853c4bc4 mach_msg_trap + 8
1 libsystem_kernel.dylib 0x00000001853c4a3c mach_msg + 72
2 CoreFoundation 0x0000000185875c4c __CFRunLoopServiceMachPort + 196
3 CoreFoundation 0x0000000185873818 __CFRunLoopRun + 1424
4 CoreFoundation 0x0000000185793e78 CFRunLoopRunSpecific + 436
5 GraphicsServices 0x0000000187628f84 GSEventRunModal + 100
6 UIKit 0x000000018f5360bc UIApplicationMain + 208
7 TestCrashInBackground 0x0000000100e8dbac 0x100e88000 + 23468
8 libdyld.dylib 0x00000001852b656c start + 4
对我们来说,问题在于显示通知会导致应用程序崩溃(当应用程序处于后台时)。我们甚至创建了一个测试应用程序(您在上面看到的 TestCrashInBackground),我们可以在其中重现此问题。该应用程序仅显示通知,没有任何后台任务。 测试用例是:
结果:操作系统在一些(短)时间后终止了该应用。
发生这种情况后,我们进行了系统诊断,我们可以看到,当我们显示通知时,添加了一个名为“will present notification”的断言。
default 2017-10-03 14:32:16.280562 +0200 assertiond [SpringBoard:53] Attempting to acquire assertion for TestCrashInBack:507: <BKProcessAssertion: 0x101235c90; "will present notification" (notificationAction:30s); id:…E1D79D51D1D9>
default 2017-10-03 14:32:16.281283 +0200 assertiond [TestCrashInBack:507] Add assertion: <BKProcessAssertion: 0x101235c90; id: 53-96A5F4EA-4C42-4675-97E4-E1D79D51D1D9; name: "will present notification"; state: active; reason: notificationAction; duration: 30.0s> {
owner = <BSProcessHandle: 0x10110a810; SpringBoard:53; valid: YES>;
flags = preventSuspend, preventThrottleDownUI, preventIdleSleep, preventSuspendOnSleep;
}
大约 45 秒后,应用程序被终止,因为它“有超出允许时间的事件断言”:
default 2017-10-03 14:33:00.436085 +0200 assertiond [TestCrashInBack:507] Forcing crash report with description: TestCrashInBack:507 has active assertions beyond permitted time:
<BKProcessAssertion: 0x101235c90; "will present notification" (notificationAction:30s); id:…E1D79D51D1D9> (owner: SpringBoard:53)
所有这一切只是为了显示通知...非常严重的错误!
这是添加通知的代码:
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.body = NSLocalizedString(@"This is test notification", nil);
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:content.body content:content trigger:[UNTimeIntervalNotificationTrigger triggerWithTimeInterval:1.0 repeats:NO]];
[[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
NSLog(@"display notification error:%@", error);
}];
我已经向 Apple (id: 34788843) 提交了一份错误报告,其中附有我们的测试项目和系统诊断信息。希望他们能尽快解决这个问题。
关于iOS11看门狗超时崩溃(0x8badf00d)但代码不在堆栈上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498547/
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、一台正常联网可使用的电脑。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。 4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注
运行bundleinstall后出现此错误:Gem::Package::FormatError:nometadatafoundin/Users/jeanosorio/.rvm/gems/ruby-1.9.3-p286/cache/libv8-3.11.8.13-x86_64-darwin-12.gemAnerroroccurredwhileinstallinglibv8(3.11.8.13),andBundlercannotcontinue.Makesurethat`geminstalllibv8-v'3.11.8.13'`succeedsbeforebundling.我试试gemin
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
使用rails4,ruby2。我在rails配置中为我的cookiesession设置了30分钟的超时时间。问题是,如果我转到表单,让session超时,然后提交表单,我会收到此ActionController::InvalidAuthenticityToken错误。如何在Rails中优雅地处理这个错误?比如说,重定向到登录屏幕? 最佳答案 在您的ApplicationController:rescue_fromActionController::InvalidAuthenticityTokendoredirect_tosome_p
在Ruby中,我需要在n毫秒秒后暂停一段代码的执行。我知道RubyTimeout库支持秒的超时:http://ruby-doc.org/stdlib/libdoc/timeout/rdoc/index.html这可能吗? 最佳答案 只需为超时使用十进制值。n毫秒的示例:Timeout::timeout(n/1000.0){sleep(100)} 关于Ruby在n*milli*秒后超时一段代码,我们在StackOverflow上找到一个类似的问题: https:
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上
我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da