我可以调试从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一两秒的循环,然后检查主函数顶部的标志 – 当你进入调试器时,只需更改标志就可以了逃避循环。