我可以调试从IPA存档安装的iOS应用吗?

我的应用程序有一些问题,只有当我安装它时才会重现,但如果我只是从Xcode运行应用程序,则无法重现。 我想调试这个问题,但到目前为止我没有任何运气。 我正在使用Xcode 5.1.1。 这是我做的:

1)转到Product-> Scheme-> Edit Scheme-> Archive并将构建配置设置为Debug。

2)代码签名身份设置为iPhone Developer。

3)生成调试符号设置为是。

4)转到Product-> Archive,归档后,单击“Distribute”,然后选择“Save for Enterprise或Ad Hoc Deployment”。

5)选择了我的开发配置文件。

6)单击“导出”并导出.ipa文件。

7)使用iPhone配置实用程序将应用程序安装到设备上。

8)在设备上运行应用程序。

9)在Xcode中,转到Debug-> Attach To Process->通过PID或Name,输入应用程序名称。 Xcode成功附加并表示在iPad上运行应用程序。

10)然而,当我在我的应用程序中执行某些操作时,我无法点击任何应该被击中的断点(如果我从Xcode安装并运行应用程序,则所有断点都被击中)。

我错过了什么吗?

此时您还没有针对该应用程序的任何调试信息,并且由于大多数应用程序都被彻底剥离,因此lldb甚至不会挂起符号。 所以我们无法成功设置断点。

当您构建应用程序时,Xcode生成了一个dSYM文件(MyApp.app.dSYM),其中包含调试信息,因此所有文件都不会丢失。 问题是当你在设备上附加一些 – Xcode – 随机应用程序时,Xcode无法知道在哪里可以找到它的调试信息。

您可以使用以下命令将调试信息添加到lldb中的调试会话中:

(lldb) add-dsym  

附加后必须这样做。

lldb还使用SpotLight来查找dSYM,所以如果你将dSYM放在SpotLight知道要搜索的地方(比如桌面或用户目录下的文件夹),那么lldb应该自动选择它。

您可以通过执行以下操作来判断lldb是否已成功读取dSYM:

 (lldb) image list  

如果lldb找到了dSYM,它会在列出AppName二进制文件的路径后在单独的行中列出它的路径。

吉姆英厄姆,谢谢你的回答。

我找到了无法调试静态库的原因。 在每个Xcode项目中,“部署”部分下都有一个名为“剥离链接产品”的设置。 在我的所有项目中,此设置都设置为“是”。

为了调试存档构建的应用程序的静态库,我在每个依赖库项目(以及主项目)中将此设置设置为“否”。 对于调试/释放模式,也可以设置不同。 在此之后,我看到归档期间构建的库符号,并且能够调试到库代码中。 我希望这可以帮助别人。

不幸的是(或者幸运的是)我试图调试的错误不会在库符号未被剥离时再现。 当符号被剥离时可能会发生某些事情,我需要进一步调查。

我正在努力解决同样的问题,只是从Xcode启动我的应用程序不是一个选项 – 我必须构建IPA,在iOS设备上加载它,然后调试。 最终我能够通过以下步骤完成这项工作:

1)将方案归档目标设置为Debug

2)更改Debug版本的以下设置

  • 保留私有外部符号(KEEP_PRIVATE_EXTERNS):是
  • 启用Bitcode(ENABLE_BITCODE):否
  • 剥离链接产品(STRIP_INSTALLED_PRODUCT):没有

3)将生成的IPA文件重建,存档并部署到iOS设备。

4)启动应用程序,在Xcode中,选择Debug / Attach to Process / YourAppName(id)

5)进入调试器 – 您应该能够看到代码,放置和使用断点等。

如果你想从一开始就调试你的代码,只需放一个hibernate一两秒的循环,然后检查主函数顶部的标志 – 当你进入调试器时,只需更改标志就可以了逃避循环。