有啥方法可以在生产环境中使用数据集调试应用程序?
Posted
技术标签:
【中文标题】有啥方法可以在生产环境中使用数据集调试应用程序?【英文标题】:Any way to debug app with dataset in production environment?有什么方法可以在生产环境中使用数据集调试应用程序? 【发布时间】:2015-03-26 09:03:54 【问题描述】:我在Production Environment
中的CloudKit
数据集比Development
稍大,并且可能存在其他奇异差异。
有一个讨厌的deadlock 在生产模式下使用我的应用程序。是否可以以任何方式调试客户端?还是我应该尽可能多地记录并以某种方式发送出去?
这是一个线程问题,所以如果不检查 Xcode 中的线程,它确实可以做任何事情。任何的想法?我正在使用 Core Data 到本地存储。
【问题讨论】:
我尝试卷曲 URL,但得到 403 Forbidden。 您是否在越狱设备上尝试过并使用 cycript? 【参考方案1】:-
回滚源代码中的更改,以便能够运行应用程序。
将记录从生产环境同步到本地核心数据存储。
在 Xcode 设备菜单中从容器中复制出 sqlite 数据库。
创建一个具有相同模型的临时项目,用数据库填充它。
设置临时项目以使用以前的 CloudKit 容器。
在仪表板中重置开发环境。
从临时项目上传所有记录。
使用原始源代码运行原始项目。
【讨论】:
【参考方案2】:我建议使用崩溃报告服务。虽然有一些选择,但我与 Crashlytics 合作过,我对他们提供的报告非常满意,总是帮助我修复生产中的错误。
【讨论】:
嗯,这不是崩溃,安装可能需要时间,它能够显示有关线程问题的一些信息吗? 是的,如果您没有崩溃,这可能不是最好的主意。但是如果你发生了崩溃,它会向你显示所有象征性线程的状态,很容易看到每个人当时在做什么。【参考方案3】:当应用程序进入后台时,在某些时候它会被 ios 杀死,因为您的线程不会回复 -applicationDidEnterBackground
,然后您将获得所有线程的回溯。
如果你想有更好的机会触发kill(如果锁定的线程不是主线程),你可以在你的工作线程中获取一个后台任务(- beginBackgroundTaskWithExpirationHandler:
):如果它们在某个时候被锁定,它们会永远不要释放后台任务,他们会触发杀戮。
现在只需等待 iOS 调度程序终止您的应用并获取堆栈跟踪。在那里,您应该能够通过查看所有线程的回溯并确定哪些被锁定在 mutex lock() 函数中来找到罪魁祸首。
我敢打赌,你甚至不需要符号化。
【讨论】:
以上是关于有啥方法可以在生产环境中使用数据集调试应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何在单个 iOS 项目/应用程序中为发布和调试模式(测试和生产环境)制作不同的 Firebase 数据库?