有啥方法可以在生产环境中使用数据集调试应用程序?

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() 函数中来找到罪魁祸首。

我敢打赌,你甚至不需要符号化。

【讨论】:

以上是关于有啥方法可以在生产环境中使用数据集调试应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

生产环境中系统调试--BTrace

如何在单个 iOS 项目/应用程序中为发布和调试模式(测试和生产环境)制作不同的 Firebase 数据库?

广告未在发布模式下展示

如何在生产环境中调试 java heap OutOfMemory 错误?

生产环境重启oracle实例有啥影响

如何在生产环境中使用数据库夹具