通过应用程序图标从后台返回时发生崩溃。
但是,我在控制台日志中看不到任何详细信息。有一个信号要终止,但是我们找不到信号编号。
<FBApplicationProcess: 0x117bcb930; Maixxxx; pid: 1762> exited abnormally via signal.
Process exited: <FBApplicationProcess: 0x117bcb930; Maixxx; pid: -1> -> <FBApplicationProcessExitContext: 0x17103f820; exitReason: signal; terminationReason: (none)>
重现崩溃的过程如下:
由于崩溃仅在从后台返回时发生,并且需要进入后台几分钟,所以我无法在带有lldb的调试模式下运行。
我没有使用任何后台功能。
此外,我在Fabric的Crashlytics中没有看到任何崩溃报告。所以我认为不能同时调用信号处理程序?
如何调查这种问题?
答案 0 :(得分:3)
根据类似的经验,这些事情可能很艰难。在不了解您的应用程序的情况下,我只能提供提示,而没有明确的答案,但这也许会对您有所帮助。
使用print
等进行直接日志记录的后备且繁琐的方法,尽管有两种尝试“捕获”进程的方法。
但是,首先让我强调一下,“背景”并不总是相同的,不幸的是人们经常松散地使用该术语。根据状态转换导致崩溃的情况,您可能会运气不佳,必须简单地使用手动日志记录进行试验。应用可以在后台运行,即不在后台运行,但仍在运行。通常在连接调试器时会出现这种情况,否则它将无法完成其工作。或者,它们可以被OS挂起(甚至终止)。调试器可以防止这种情况,您可能已经知道了。
可以帮助您的两件事是
如果您使用后台获取,即您描述的“从后台模式返回”会自动发生,则可以在构建方案的“运行”配置中激活“由于后台获取事件启动”选项部分。
从主屏幕运行您的应用程序,使用主屏幕按钮将其置于背景中,然后稍等一会儿(您过去可能已经这样做过,可以感觉到崩溃何时发生)。您的应用最终应该会进入暂停状态(但是您无法在AFAIK的任何地方看到它)。无需通过多任务UI再次将其置于前台,只需通过“ Debug-Attach to process”菜单再次附加调试器即可。这应该使您的应用程序从挂起状态返回到后台状态,在该状态下可能真正发生崩溃(如果是从后台运行到前台时发生崩溃,则您可能可以将其调试为通常)。希望调试器能及时完成附加,否则我就没主意了。 :(
我个人还没有遇到这个具体问题,但是我知道背景知识可能很棘手。也许this的讨论也可以为您提供帮助(我也从那里获取了部分信息)。
答案 1 :(得分:0)
在真实设备上以调试模式运行该应用程序。按“主页”按钮将应用程序发送到后台并继续调试。然后,您可以将应用程序置于前台并继续进行调试,或者在applicationWillEnterForeground处放置一个断点。
答案 2 :(得分:0)
您不能在真实设备上调试它。连接调试器后,您的应用将永远不会在真实设备中进入后台模式。
您可以尝试在模拟器上调试它。 无论如何,请检查您的类属性,并将属性设置为“强”,以确保不会由于缺少属性而发生这种情况。
我已经阅读了几个具有FBApplicationProcess的StackOverflow问题。通常,这是由于应用启动时缺少数组或某些东西而引起的。
最诚挚的问候。
答案 3 :(得分:0)
我已经经历了以上所有答案,并且都给出了正确的答案。不过,我想分享我的观点。
如果该应用程序在任何具有调试模式和有线插件的iOS真实设备上运行,甚至在模拟器上运行,该应用程序都不会在后台运行。
如果该应用程序在没有电线插件的情况下运行或在没有Xcode的情况下运行(直接在iPhone中启动该应用程序),然后将该应用程序置于后台,则该应用程序将在接下来的3分钟内在后台运行。 3分钟后,该应用程序将自动挂起并从主线程中删除。现在,当我们再次打开该应用程序时,它将被视为全新启动。
如果您的应用启用了任何后台功能,那么即使在后台,您的应用也可以运行,但是在此期间您无法进行任何UI更改。
要使应用程序在后台运行,必须正确处理后台功能。即。如果在“应用程序处于前景”状态的情况下在您的应用程序中使用了位置信息,则应用程序在后台运行的时间不会超过3分钟。因此,如果您想在后台连续运行您的应用程序,则必须在Info.plist文件中用电池耗电字表示正确的原因,否则Apple将拒绝它。
为我提供有关您问题的更多信息。
谢谢。
答案 4 :(得分:0)
崩溃日志在测试设备上仍然可用。
要获取崩溃日志,请尝试以下步骤: