我有没有办法注册一个全局错误处理程序,以防止应用程序崩溃?此处描述了崩溃报告:如何从Android应用程序获取崩溃数据?.我有一个想法是扩展这些解决方案以接受应用程序上下文,以便可以重定向到特定的报告活动?但是一旦报告崩溃,不确定应用程序上下文是否在此时有效?
但是,当发生崩溃时,如何将用户重定向到全局错误消息Activity?是否有一些高级方法来注册错误处理程序,以捕获所有错误并防止崩溃?有没有办法注册这样的处理程序,以便它可以防止或幸免于崩溃,然后将用户重定向到一个特定的活动,这将显示有问题的错误消息?
这是我对错误处理程序的修改:
1)只需将applicationContext构造函数作为ctx 传递给构造函数
2)添加reportError(stackTrace)方法将控制转移到错误消息页面
private void reportError(String stackTrace){
Intent i = new Intent(ctx, DisplayErrorActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setAction("DISPLAY_ERROR_ACTIVITY");
Bundle b = new Bundle();
b.putString("STACKTRACE", stackTrace);
i.putExtras(b);
try{
Log.d("MyErrorHandler","reportError ctx="+ctx);
ctx.startActivity(i);
} catch (Exception e) {
Exception ex = e;
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
并reportError在下面打电话:
public void uncaughtException(Thread t, Throwable e) {
Log.d("MyUncoughtExceptionHandler", "uncoughtException ctx="+ctx);
String timestamp=getDateTime();
final Writer result = new StringWriter();
final PrintWriter printWriter = new PrintWriter(result);
e.printStackTrace(printWriter);
String stacktrace = result.toString(); …Run Code Online (Sandbox Code Playgroud) 有很多关于如何使用计算机访问崩溃报告的教程,但我希望我的应用程序在启动时扫描崩溃报告(来自其自身),以便用户可以使用我的应用程序向我发送报告.这可能吗?
我在VB.Net上做了一个应用程序.但有些用户在启动时会遇到崩溃.这是"一个问题导致该程序无法正常工作"只需一个按钮"关闭程序".由于应用程序加载时发生了很多事情,是否可以知道导致问题的原因?
我正在尝试设置一个全局异常处理服务,如本答案中所述.这种方法听起来合乎逻辑,因为在崩溃之后,我的自定义中的代码Thread.UncaughtExceptionHandler可能无法成功执行,因为应用程序可能不处于稳定状态,或者因为可能没有足够的时间在该进程被操作系统杀死之前.
不幸的是,这种方法似乎不起作用,因为服务在同一个过程中启动,所以它也被杀死了.如何从处理程序启动服务uncaughtException()?我可以强制服务在完全独立的过程中启动吗?
我正在设置我的自定义默认(VM级别)异常处理程序,Application如下所示:
public class MyApp extends Application {
@Override
public void onCreate() {
Thread.setDefaultUncaughtExceptionHandler(
MyExceptionReporter.getInstance(this));
...
Run Code Online (Sandbox Code Playgroud)
在我的自定义处理程序中,我正在启动这样的服务:
final Intent i = new Intent(MyExceptionService.INTENT);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra(MyExceptionService.EXTRA_STACK_TRACE,
Log.getStackTraceString(ex));
mContext.startService(i);
Run Code Online (Sandbox Code Playgroud)
该服务在AndroidMaifest.xml文件中被解析,并从应用程序的其他地方启动.
我在提交更新之前一直在测试...来自iOS4,并且已经遇到以下情况...... 1)从我的应用程序创建PDF.2)似乎不一致,因为在大多数情况下我可以创建没有问题的新PDF.3)崩溃日志指示ExportView的第341行崩溃,我已经配置了该行,因此该行上唯一的项目是CFRangeMake.请注意,控制台中存在一个值,因为在多行中使用了相同的值.
一些注意事项:使用Xcode 4.6,目标是iOS6,完全ARC,在新iPad上测试.
任何帮助都将非常感谢!!
我删除了一些崩溃日志和控制台日志以缩短这篇文章!对它的长度表示歉意!
要应用于PDF创建的字符串的方法:
- (CFMutableAttributedStringRef) CreateAttributedString:(int*) dateLength
titleLength:(int*) titleLength
{
NSLog(@"Current EntryIndex: %d", _entryIndex);
NSLog(@"Current Entry: %@", _currentEntry); // current entry is set from the parent view controller via PrepareForSegue
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMMM dd, yyyy, h:mm aaa"];
NSString * dateString = [dateFormatter stringFromDate:_currentEntry.created];
*dateLength = [dateString length];
NSLog(@"DateString: %@", dateString);
NSLog(@"2nd DateLength: %d", *dateLength);
NSString *title = _entryTitle;
*titleLength = [title length];
NSString *bodyString = _entryText;
NSString *contentString = [NSString …Run Code Online (Sandbox Code Playgroud) 我记录了我的应用程序崩溃,但是我的应用程序(5 Control)中的最后一行仅指向方法开始。我怎么知道问题出在哪一行?
0 CoreFoundation 0x185f0af50 __exceptionPreprocess + 132
1 libobjc.A.dylib 0x1924141fc objc_exception_throw + 60
2 CoreFoundation 0x185f0fc04 -[NSObject(NSObject) doesNotRecognizeSelector:] + 220
3 CoreFoundation 0x185f0d930 ___forwarding___ + 912
4 CoreFoundation 0x185e2d5dc _CF_forwarding_prep_0 + 92
5 Control 0x10005acb4 -[PaymillPaymentService handleTransactionListRequest:] (PaymillPaymentService.m:211)
6 Foundation 0x186a7416c __103+[__NSOperationInternal _observeValueForKeyPath:ofObject:changeKind:oldValue:newValue:indexes:context:]_block_invoke96 + 28
7 libdispatch.dylib 0x1929ec014 _dispatch_call_block_and_release + 24
8 libdispatch.dylib 0x1929ebfd4 _dispatch_client_callout + 16
9 libdispatch.dylib 0x1929f32b8 _dispatch_root_queue_drain + 556
10 libdispatch.dylib 0x1929f34fc _dispatch_worker_thread2 + 76
11 libsystem_pthread.dylib 0x192b816bc _pthread_wqthread + 356
12 libsystem_pthread.dylib 0x192b8154c start_wqthread …Run Code Online (Sandbox Code Playgroud) 我的一个应用程序(发布版本)没有响应,所以我不得不强制退出它.
OS X提交了一个Hang报告(没有崩溃报告),我将其复制到*.crash文件中.
我知道我可以使用HockeyApp等服务或atos直接表示崩溃报告,但我如何为OS X应用程序表示Hang报告?
我试图使用xCode Organizer(xCode-> Organizer-> Crashes)修复我已经发布的App的一些错误,这些错误已通过Apples崩溃报告服务注意到。它工作正常,我可以在项目中打开崩溃报告,因此xCode向我显示了崩溃的每个细节,例如代码行,发生异常,调用堆栈等。
我的问题是,我找不到异常原因,例如:
-[__NSArray0 addObject:]: unrecognized selector sent to instance 0x7fa99b801c40
Run Code Online (Sandbox Code Playgroud)
我需要100%找出原因,导致我的应用程序在此行在某些设备上崩溃。我已经研究过苹果有关分析崩溃报告的文章,但没有成功。
有人知道吗,我可以在Apple的崩溃报告服务提供的崩溃报告中看到崩溃的原因吗?
我有一个可正确编译的Cordova应用程序。但是,当我在Android设备上用午餐时,应用程序立即在启动时崩溃。当我不知道错误是什么时,我很难调试...
问题:是否有办法从此崩溃中获取错误报告?
我通常使用chrome调试我的应用程序,但只有在该应用程序能够在设备上加载并运行的情况下,该方法才有效。
debugging android crash-reports google-chrome-devtools cordova
我的团队正在开发供客户端使用的iOS框架,当我们想要在框架中使用某种崩溃报告工具(例如Crashlytics,KSCrash等)时遇到瓶颈,以便我们可以跟踪崩溃当客户在其应用程序中使用我们的框架时。
但是,问题在于,如果第三方崩溃报告工具(框架和客户端)都使用相同的崩溃报告工具,则它们似乎无法正常工作。例如,如果我们的框架和客户端应用程序均依赖Crashlytics报告崩溃,则由于API受限制,它将无法正常工作。大多数其他开放源代码项目几乎所有时间都用于sharedInstance初始化类。因此,这也不起作用。
我的问题是...我敢肯定,那里有公司和软件正在使用某种崩溃报告工具来分析在分发给许多客户的自己的框架上的崩溃。怎么做?有什么见解吗?
crash-reports ×10
android ×3
ios ×3
crash ×2
cordova ×1
core-text ×1
crash-dumps ×1
crashlytics ×1
debugging ×1
exception ×1
frameworks ×1
hang ×1
ios6 ×1
iphone ×1
macos ×1
objective-c ×1
process ×1
vb.net ×1
winforms ×1
xcode ×1