如何使 cordova ios 应用程序崩溃
How to crash a cordova ios app
我正在尝试编写一小部分 cordova ios 应用程序。我的要求之一是提供 button/link 以允许用户使应用程序崩溃。
我曾尝试在 CDVUIWebViewNavigationDelegate.m 中引发异常,如下所示,
- (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL* url = [request URL];
if([url.path containsString:@"CRASH"])
{
NSLog(@"User crash bookmart with NSException");
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
NSDate *current = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; // Set date and time styles
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *currentTime = [dateFormatter stringFromDate:current];
[userInfo setObject:@"Crash Time" forKey:currentTime];
NSException *ex = [[NSException alloc] initWithName:@"BookmartCrashException" reason:@"User crashed bookmart!" userInfo:userInfo];
[ex raise];
}
...
}
但是当我尝试时,我看到了以下日志,
2017-09-04 17:09:57.148 HRent[96124:12077045] User crash bookmart with NSException
2017-09-04 17:09:57.149 HRent[96124:12077045] *** WebKit discarded an uncaught exception in the >webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate: User crashed bookmart!
异常已被丢弃,应用程序没有崩溃:(
有没有其他方法可以确保应用程序崩溃?或者通过某些配置我可以禁用 WebKit 以丢弃此类异常吗?
非常感谢您的回答!
问候
雷切尔
尝试在主线程上通过分派启动异常:
dispatch_async(dispatch_get_main_queue(), ^{
NSInteger asd = 5 / 0; // Simple division by 0
});
如果可行,请尝试使用 NSException 方法获取所有额外信息。
您是否尝试过默认核心数据实现示例中的 abort() ?它会导致应用程序生成崩溃日志并终止。
hockeyapp 插件提供了使应用程序崩溃的功能。在您找出问题之前,您可以将此作为临时解决方案。
hockeyapp.forceCrash():void
谢谢大家。
除了 Will 建议的插件外,我已经尝试了所有建议。
总的来说,有两种方法可以使应用程序崩溃。
- 按照 Michale 的建议,使用 abort() 终止应用程序。
这是我使用的一段代码,
- (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:
(UIWebViewNavigationType)navigationType
{
NSURL* url = [request URL];
if([url.path containsString:@"CRASH"])
{
abort();
}
...
}
- 按照 shebuka 的建议,在主线程上分派异常。这里的技巧是我们不能使用访问 nil 数组或除以 0 来引发此异常,而必须在我的问题中写 I post 。否则,应用程序不会崩溃并且不会显示任何日志。
这是我使用的代码片段,
- (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:
(UIWebViewNavigationType)navigationType
{
NSURL* url = [request URL];
if([url.path containsString:@"CRASH"])
{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"User crash bookmart with NSException");
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
NSDate *current = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; // Set date and time styles
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *currentTime = [dateFormatter stringFromDate:current];
[userInfo setObject:@"Crash Time" forKey:currentTime];
NSException *ex = [[NSException alloc] initWithName:@"BookmartCrashException" reason:@"User crashed bookmart!" userInfo:userInfo];
[ex raise];
});
} ...}
我将选择解决方案 2,因为此应用程序崩溃,但出现异常更符合我的要求。
谢谢大家
我正在尝试编写一小部分 cordova ios 应用程序。我的要求之一是提供 button/link 以允许用户使应用程序崩溃。
我曾尝试在 CDVUIWebViewNavigationDelegate.m 中引发异常,如下所示,
- (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL* url = [request URL];
if([url.path containsString:@"CRASH"])
{
NSLog(@"User crash bookmart with NSException");
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
NSDate *current = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; // Set date and time styles
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *currentTime = [dateFormatter stringFromDate:current];
[userInfo setObject:@"Crash Time" forKey:currentTime];
NSException *ex = [[NSException alloc] initWithName:@"BookmartCrashException" reason:@"User crashed bookmart!" userInfo:userInfo];
[ex raise];
}
...
}
但是当我尝试时,我看到了以下日志,
2017-09-04 17:09:57.148 HRent[96124:12077045] User crash bookmart with NSException 2017-09-04 17:09:57.149 HRent[96124:12077045] *** WebKit discarded an uncaught exception in the >webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate: User crashed bookmart!
异常已被丢弃,应用程序没有崩溃:(
有没有其他方法可以确保应用程序崩溃?或者通过某些配置我可以禁用 WebKit 以丢弃此类异常吗?
非常感谢您的回答!
问候 雷切尔
尝试在主线程上通过分派启动异常:
dispatch_async(dispatch_get_main_queue(), ^{
NSInteger asd = 5 / 0; // Simple division by 0
});
如果可行,请尝试使用 NSException 方法获取所有额外信息。
您是否尝试过默认核心数据实现示例中的 abort() ?它会导致应用程序生成崩溃日志并终止。
hockeyapp 插件提供了使应用程序崩溃的功能。在您找出问题之前,您可以将此作为临时解决方案。
hockeyapp.forceCrash():void
谢谢大家。 除了 Will 建议的插件外,我已经尝试了所有建议。 总的来说,有两种方法可以使应用程序崩溃。
- 按照 Michale 的建议,使用 abort() 终止应用程序。
这是我使用的一段代码,
- (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:
(UIWebViewNavigationType)navigationType
{
NSURL* url = [request URL];
if([url.path containsString:@"CRASH"])
{
abort();
}
...
}
- 按照 shebuka 的建议,在主线程上分派异常。这里的技巧是我们不能使用访问 nil 数组或除以 0 来引发此异常,而必须在我的问题中写 I post 。否则,应用程序不会崩溃并且不会显示任何日志。
这是我使用的代码片段,
- (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:
(UIWebViewNavigationType)navigationType
{
NSURL* url = [request URL];
if([url.path containsString:@"CRASH"])
{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"User crash bookmart with NSException");
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
NSDate *current = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; // Set date and time styles
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *currentTime = [dateFormatter stringFromDate:current];
[userInfo setObject:@"Crash Time" forKey:currentTime];
NSException *ex = [[NSException alloc] initWithName:@"BookmartCrashException" reason:@"User crashed bookmart!" userInfo:userInfo];
[ex raise];
});
} ...}
我将选择解决方案 2,因为此应用程序崩溃,但出现异常更符合我的要求。
谢谢大家