如何在我的测试导致应用程序崩溃时刷新覆盖率数据-适用于ios应用程序

如何在我的测试导致应用程序崩溃时刷新覆盖率数据-适用于ios应用程序,ios,unit-testing,continuous-integration,code-coverage,gcov,Ios,Unit Testing,Continuous Integration,Code Coverage,Gcov,我想获得测试的代码覆盖率。所以我设置了设置,用.gcno文件构建了一个应用程序,并在模拟器上运行它 如果没有崩溃问题,它可以成功获取覆盖率数据 但如果应用程序崩溃,我将一无所获 那么,当应用程序崩溃时,如何获取代码覆盖率数据呢? 在我看来,这是因为当应用程序崩溃时,它不会调用\uu gcov\u flush()方法。我只将应用程序不在后台运行添加到我的plist文件中,因此只有在我按下Home按钮时才会调用\uugcov\u flush() 在应用程序崩溃之前,有没有办法调用\uu gcov\u

我想获得测试的代码覆盖率。所以我设置了设置,用.gcno文件构建了一个应用程序,并在模拟器上运行它

如果没有崩溃问题,它可以成功获取覆盖率数据

但如果应用程序崩溃,我将一无所获

那么,当应用程序崩溃时,如何获取代码覆盖率数据呢?

在我看来,这是因为当应用程序崩溃时,它不会调用
\uu gcov\u flush()
方法。我只将
应用程序不在后台运行
添加到我的plist文件中,因此只有在我按下Home按钮时才会调用
\uugcov\u flush()

在应用程序崩溃之前,有没有办法调用
\uu gcov\u flush()

苹果为应用程序提供
NSSetUncaughtExceptionHandler()
方法。我们可以在应用程序崩溃之前添加自己的处理程序

因此,我们可以在这个函数中调用
\uuu gcov\u flush()

#import <objc/runtime.h>
extern void __gcov_flush();
// in the exception handler function, call flush like this:
if(__gcov_flush){
    __gcov_flush();
}
#导入
外部无效uuu gcov_flush();
//在异常处理程序函数中,按如下方式调用flush:
如果(uuu gcov_uflush){
__gcov_flush();
}
完成了