【问题标题】:If your app is terminated by the iOS system does it generate a crash report?如果您的应用程序被 iOS 系统终止,它会生成崩溃报告吗?
【发布时间】:2015-03-20 22:40:27
【问题描述】:

在设备上运行时(iOS 8),我认为系统可能会在我的应用程序暂停时终止我的应用程序,因为内存或后台任务运行时间过长。我怀疑这是因为当我恢复应用程序时它已经返回到根视图控制器,除非应用程序重新启动,否则这是不可能的。

但是,在查看设备日志时,我从未看到它的崩溃报告。

如果系统终止您的应用程序,它会始终生成崩溃报告吗?

【问题讨论】:

    标签: ios crash-reports terminate


    【解决方案1】:

    如果应用程序被内存不足杀死通常generates a low memory report:

    当检测到内存不足的情况时,iOS 中的虚拟内存系统依靠应用程序的协作来释放内存。低内存通知作为释放内存的请求发送给所有正在运行的应用程序和进程,希望减少正在使用的内存量。如果内存压力仍然存在,系统可能会终止后台进程以缓解内存压力。如果可以释放足够的内存,您的应用程序将继续运行并且不会生成崩溃报告。否则,您的应用程序将被 iOS 终止,因为没有足够的内存来满足应用程序的需求,并且会生成内存不足报告并将其存储在设备上。

    内存不足报告的格式不同于其他崩溃报告,因为它没有应用程序线程的堆栈跟踪。每个进程的内存使用情况以内存页数的形式报告,截至本文撰写时,每个进程的内存页数为 4KB。您将在任何被 iOS 终止以释放内存的进程名称旁边看到“(抛弃)”。如果您在应用程序名称旁边看到它,则表明该应用程序因使用过多内存而被终止。

    这个报告通常可以在崩溃日志中看到,但根据我的经验,这个日志并不能保证。

    An example of a memory report:

    Incident Identifier: 30E46451-53FD-4965-896A-457FC11AD05F
    CrashReporter Key:   5a56599d836c4f867f6eec76afee451bf9ae5f31
    OS Version:          iPhone OS 3.1.3 (7E18)
    Date/Time:           2012-10-17 21:39:06.967 -0400
    
    Free pages:        96
    Wired pages:       10558
    Purgeable pages:   0
    Largest process:   Rage Masters
    
    Processes
         Name                 UUID                    Count resident pages
    Rage Masters <cc527ca9b51937c5adbe035fe27a7b12>    9320 (jettisoned) (active)
    mediaserverd <3d3800d6acfff050e4d0ed91cbe2467e>     255
     dataaccessd <13d80b2e707acc91f9aa3ec4c715b9cc>     505
         syslogd <8eddddc00294d5615afded36ee3f1b62>      71
            apsd <32070d91b216d806973c8f1b1d8077a4>     171
       securityd <b9e51062610d27f727c5119b8f80dcdf>     243
         notifyd <591dd4dd804b4b8741f52335ea1fa4ab>    2027
      CommCenter <b4b87526ae086bb62c982f1078f43f81>     189
     SpringBoard <324939a437d1cca1fa4af72d9f5d0eba>    2158 (active)
      accessoryd <8f21c8b376d16e2ccb95ed6d21d8317a>      91
         configd <85efd41aceac34ccc0019df76623c7a9>     371
       fairplayd <a2eaf736b3e07c7c9a2c82e9eb893555>      93
    mDNSResponder <df1cd275e4ad434e0575990e8e1da4cb>     292
       lockdownd <80d2bd44c0bcca273d48ce52010f7e65>    1204
         launchd <a5988245aade809bf77576f1d9de42c5>      72
    

    其实这是crashlytics团队的问题之一trying to solve

    这些很棘手,因为这些事件实际上是与崩溃分开的事件。低内存事件的捕获很复杂,因为没有已知的方法可以使用公共 API 捕获低内存退出。

    但是,我们正在开发一个系统,该系统将生成这些事件的记录。敬请期待!

    关于后台崩溃通常你会得到一个类似this message:的崩溃日志

    Application Specific Information:
    MyMapApp[1234] has active assertions beyond permitted time: 
    {(
        <SBProcessAssertion: 0x63a07a0> identifier: CoreLocationRegistration process: MyMapApp[1234] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:1234 preventSuspend  preventIdleSleep ,
    <SBProcessAssertion: 0xa095050> identifier: CoreLocationBackgroundClient process: MyMapApp[1234] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:1234 preventSuspend  preventIdleSleep 
    )}
    

    【讨论】:

    • 如果 crashlytics 在捕捉这个问题时遇到问题,这并不令人鼓舞,但我会看看。另外,您是否知道由于后台进程耗时过长而终止时可能会报告什么?这实际上是我更怀疑的。
    • 编辑添加了进入后台崩溃应用程序的情况。
    猜你喜欢
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2012-08-12
    • 1970-01-01
    相关资源
    最近更新 更多