有什么方法可以在生产环境中使用数据集调试应用程序?
Any way to debug app with dataset in production environment?
我在 Production Environment
中的 CloudKit
数据集比 Development
大一些,可能存在其他奇特的差异。
在生产模式下使用我的应用程序有一个令人讨厌的 deadlock。是否可以以任何方式调试客户端?还是我应该记录尽可能多的东西并以某种方式发送出去?
这是一个线程问题,所以如果不检查 Xcode 中的线程,它确实可以做任何事情。任何想法?我正在使用核心数据到本地存储。
我建议使用崩溃报告服务。虽然有几个选项,但我与 Crashlytics 合作,我对他们提供的报告非常满意,总是帮助我修复生产中的错误。
- 回滚源代码中的更改,以便能够运行 app.
- 将记录从生产环境同步到本地核心数据存储。
- 在Xcode设备菜单中从容器中复制sqlite数据库。
- 创建一个具有相同模型的临时项目,用数据库填充它。
- 设置临时项目以能够使用以前的 CloudKit 容器。
- 在仪表板中重置开发环境。
- 从临时项目上传所有记录。
- 运行 带有原始源代码的原始项目。
当应用程序进入后台时,在某个时候它会被 iOS 杀死,因为你的线程不会回答 -applicationDidEnterBackground
,然后你会得到一个回溯你所有的线程。
如果你想有更好的机会触发终止(如果锁定的线程不是主线程),你可以在你的工作线程中获取一个后台任务(- beginBackgroundTaskWithExpirationHandler:
):如果它们被锁定在有些时候他们永远不会释放后台任务,他们会触发杀戮。
现在只需等待 iOS 调度程序终止您的应用程序并获取堆栈跟踪。在那里,您应该能够通过查看所有线程的回溯并确定哪些被锁定在互斥锁 lock() 函数中来找到罪魁祸首。
我打赌你甚至不需要符号化。
我在 Production Environment
中的 CloudKit
数据集比 Development
大一些,可能存在其他奇特的差异。
在生产模式下使用我的应用程序有一个令人讨厌的 deadlock。是否可以以任何方式调试客户端?还是我应该记录尽可能多的东西并以某种方式发送出去?
这是一个线程问题,所以如果不检查 Xcode 中的线程,它确实可以做任何事情。任何想法?我正在使用核心数据到本地存储。
我建议使用崩溃报告服务。虽然有几个选项,但我与 Crashlytics 合作,我对他们提供的报告非常满意,总是帮助我修复生产中的错误。
- 回滚源代码中的更改,以便能够运行 app.
- 将记录从生产环境同步到本地核心数据存储。
- 在Xcode设备菜单中从容器中复制sqlite数据库。
- 创建一个具有相同模型的临时项目,用数据库填充它。
- 设置临时项目以能够使用以前的 CloudKit 容器。
- 在仪表板中重置开发环境。
- 从临时项目上传所有记录。
- 运行 带有原始源代码的原始项目。
当应用程序进入后台时,在某个时候它会被 iOS 杀死,因为你的线程不会回答 -applicationDidEnterBackground
,然后你会得到一个回溯你所有的线程。
如果你想有更好的机会触发终止(如果锁定的线程不是主线程),你可以在你的工作线程中获取一个后台任务(- beginBackgroundTaskWithExpirationHandler:
):如果它们被锁定在有些时候他们永远不会释放后台任务,他们会触发杀戮。
现在只需等待 iOS 调度程序终止您的应用程序并获取堆栈跟踪。在那里,您应该能够通过查看所有线程的回溯并确定哪些被锁定在互斥锁 lock() 函数中来找到罪魁祸首。
我打赌你甚至不需要符号化。