我与之合作的开发团队制作了一个容器应用程序,用于提供客户端的移动网站。我们可以看到容器应用程序在iOS 10上崩溃,但没有太多关于问题原因的信息。除了Webkit和JS Core可能出现的问题之外,堆栈跟踪并没有太多指出:
Crashed: com.apple.main-thread
0 WebKit 0x19673fddc API::Object::ref() + 2
1 WebKit 0x1968bb35c WebKit::WebPageProxy::didStartProvisionalLoadForFrame(unsigned long long, unsigned long long, WTF::String const&, WTF::String const&, WebKit::UserData const&) + 192
2 WebKit 0x1968d621c void IPC::handleMessage<Messages::WebPageProxy::DidStartProvisionalLoadForFrame, WebKit::WebPageProxy, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WTF::String const&, WTF::String const&, WebKit::UserData const&)>(IPC::MessageDecoder&, WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WTF::String const&, WTF::String const&, WebKit::UserData const&)) + 100
3 WebKit 0x1967941d0 IPC::MessageReceiverMap::dispatchMessage(IPC::Connection&, IPC::MessageDecoder&) + 120
4 WebKit 0x196917614 WebKit::WebProcessProxy::didReceiveMessage(IPC::Connection&, IPC::MessageDecoder&) + 32
5 WebKit 0x19675d3e8 IPC::Connection::dispatchMessage(std::__1::unique_ptr<IPC::MessageDecoder, std::__1::default_delete<IPC::MessageDecoder> >) + 160
6 WebKit 0x19675fa00 IPC::Connection::dispatchOneMessage() + 204
7 JavaScriptCore 0x191b4c834 WTF::RunLoop::performWork() + 172
8 JavaScriptCore 0x191b4ca60 WTF::RunLoop::performWork(void*) + 36
9 CoreFoundation 0x18d332b5c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
10 CoreFoundation 0x18d3324a4 __CFRunLoopDoSources0 + 524
11 CoreFoundation 0x18d3300a4 __CFRunLoopRun + 804
12 CoreFoundation 0x18d25e2b8 CFRunLoopRunSpecific + 444
13 GraphicsServices 0x18ed12198 GSEventRunModal + 180
14 UIKit 0x1932a57fc -[UIApplication _run] + 684
15 UIKit 0x1932a0534 UIApplicationMain + 208
16 Betfred 0x10005c250 main (main.m:16)
17 libdispatch.dylib 0x18c2415b8 (Missing)
没有人能够让应用程序可靠地崩溃(包括全天候使用它的测试团队),据我们所知,移动网站没有问题。
我被要求调查这个问题,但我有点不知所措,因为如果我不能一直让它破裂,我无法诊断和修复。
我们有什么方法可以从Crashlytics获得有关此次崩溃原因的更多信息吗?
答案 0 :(得分:2)
来自Fabric的Mike和像这样的崩溃很难追查。您需要发布应用的新版本,但有三种不同的方式可以获取其他信息。
1)添加custom keys,例如跟踪正在加载的页面或正在点击的端点,可以提供其他上下文:
- (void)setObjectValue:(id)value forKey:(NSString *)key;
// calls -description on value, perfect for NSStrings!
- (void)setIntValue:(int)value forKey:(NSString *)key;
- (void)setBoolValue:(BOOL)value forKey:(NSString *)key;
- (void)setFloatValue:(float)value forKey:(NSString *)key;
2)添加custom logs作为面包屑的形式,以便更容易重现用户在崩溃前所做的步骤:
CLS_LOG(@"User clicked on menu %@", attributesDict);
3)添加user identifiers:
[CrashlyticsKit setUserIdentifier:@"123456789"];
[CrashlyticsKit setUserEmail:@"person@domain.com"];
[CrashlyticsKit setUserName:@"Awesome AppUser"];
当所有其他方法都失败时,与用户联系以获取其他信息也可以帮助追踪它。