首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在FirebaseCrashlytics.instance.crash()之后不调用具有颤振的catch (错误)

在FirebaseCrashlytics.instance.crash()之后不调用具有颤振的catch (错误)
EN

Stack Overflow用户
提问于 2022-10-31 18:22:52
回答 4查看 141关注 0票数 1

有什么方法可以在共享偏好崩溃之前保存数据吗?只有在发生崩溃时,我才会搜索禁用函数。因此,要禁用该功能,我需要检测崩溃。我想用崩溃分析来实现这一点,这有可能吗?

我试图模拟崩溃,但没有调用catch (error)

代码语言:javascript
运行
复制
try {
       
        FirebaseCrashlytics.instance.crash();


      } catch (error) {

        prefs.setBool("crash",true);
      }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-11-07 05:54:13

从文件中:

FirebaseCrashlytics.instance.crash();

您的应用程序应该在调用此方法后立即退出。在崩溃后再次打开应用程序后,Firebase Crashlytics会将崩溃报告上传到Firebase控制台。

因此,它不让catch方法被调用,它只是立即崩溃应用程序。

一个解决办法是采用这样的方法:

代码语言:javascript
运行
复制
testingCrash(){

prefs.setBool("crash",true);
some code that may or may not cause a crash...
prefs.setBool("crash",false); //If the line is executed and true is stored in 'crash' then you can be sure the code did not cause any crash

}

然后,在应用程序的每次启动时,您都可以在initState()方法中检查prefs.getBool('crash')是否是true,如果是,那么上次prefs.getBool('crash')没有成功成为false,因此就出现了崩溃。

票数 1
EN

Stack Overflow用户

发布于 2022-11-03 10:43:05

模拟错误的代码的问题是,您必须等待崩溃的发生-如下所示:

代码语言:javascript
运行
复制
      try {
        await crashFunction();
      } catch (error) {
        prefs.writeBool(key: "crash", value: true);
      }

在这种情况下,catch块将工作。

FirebaseCrashlytics.instance.crash();会触发终止崩溃的本地应用程序,所以我认为这就是为什么catch在这种情况下不能工作的原因--它无法捕捉到此类崩溃。您应该使用try catch来处理Dart/颤振异常,而不是本机崩溃-它不会那样工作。

关于您的问题--您不能在崩溃之前记录任何内容--因为您不知道什么时候会发生崩溃--但是您确实可以在catch块中完成(如果崩溃不是应用程序终止的话(但即使在这种情况下,也有一些执行逻辑的方法))。

解决这个问题的方法可能是一个广泛的日志记录系统,因此您可以记录您所需要的一切,而不考虑崩溃的发生。它可能看上去过于冗长,但它是在崩溃之前记录某件事情的唯一可能方法--记录所有的一切和任何地方。

如果要在catch块中获得更多信息,可以使用如下所示的catch的另一个覆盖:

代码语言:javascript
运行
复制
try{
...
} catch (error, stacktrace){
//save to sharedprefs
}

在这种情况下,您可以存储完整的堆栈跟踪,而不仅仅是错误描述。

此外,您还可以在以下帮助下捕获特定错误:

代码语言:javascript
运行
复制
try{
} on SomeException catch(error){
}

此覆盖将只捕获SomeException的实例,其他所有实例都将被抛出。

如果你想捕捉到一个终止错误的应用程序--我不认为有一种方法可以一笔勾销--但可以肯定的是,有一种方法可以像here在安卓平台上描述的那样,在本地平台上实现。

希望它能帮上忙

票数 0
EN

Stack Overflow用户

发布于 2022-11-07 06:58:07

到目前为止,我得到的帮助如下:也许会有帮助!

代码语言:javascript
运行
复制
class MyError extends Error {
  final dynamic data;
  final String? message;
  MyError(this.data, this.message);

  void storeError() {
    //Any Operation Can be done here
  }

  String toString() {
    var message = this.message;
    //Call this method in extension function to access there could be many ways to do so
    storeError();
    return (message != null) ? "MyError: $message" : "MyError";
  }
}

为崩溃后的指定操作创建自定义错误类:

用法:

代码语言:javascript
运行
复制
try {
      throw MyError({"testingData": "TestError"}, "Error Kind");
    } catch (error) {
      Logger.log("Crash Crash Crash", error.toString());
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74267630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档