【问题标题】: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?

标签: ios deadlock cloudkit


【解决方案1】:
  1. 回滚源代码中的更改,以便能够运行应用程序。
  2. 将记录从生产环境同步到本地核心数据存储。
  3. 在 Xcode 设备菜单中从容器中复制出 sqlite 数据库。
  4. 创建一个具有相同模型的临时项目,用数据库填充它。
  5. 设置临时项目以使用以前的 CloudKit 容器。
  6. 在仪表板中重置开发环境。
  7. 从临时项目上传所有记录。
  8. 使用原始源代码运行原始项目。

【讨论】:

    【解决方案2】:

    我建议使用崩溃报告服务。虽然有一些选择,但我与 Crashlytics 合作过,我对他们提供的报告非常满意,总是帮助我修复生产中的错误。

    【讨论】:

    • 嗯,这不是崩溃,安装可能需要时间,它能够显示有关线程问题的一些信息吗?
    • 是的,如果您没有崩溃,这可能不是最好的主意。但是如果你发生了崩溃,它会向你显示所有象征性线程的状态,很容易看到每个人当时在做什么。
    【解决方案3】:

    当应用程序进入后台时,在某些时候它会被 iOS 杀死,因为您的线程不会回复 -applicationDidEnterBackground,然后您将获得所有线程的回溯。

    如果你想有更好的机会触发kill(如果锁定的线程不是主线程),你可以在你的工作线程中获取一个后台任务(- beginBackgroundTaskWithExpirationHandler:):如果它们在某个时候被锁定,它们会永远不要释放后台任务,他们会触发杀戮。

    现在只需等待 iOS 调度程序终止您的应用并获取堆栈跟踪。在那里,您应该能够通过查看所有线程的回溯并确定哪些被锁定在 mutex lock() 函数中来找到罪魁祸首。

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

    【讨论】:

      猜你喜欢
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 2010-12-10
      • 2014-12-28
      • 2012-11-15
      相关资源
      最近更新 更多