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

时间:2014-11-11 09:14:40

标签: ios xcode debugging ipa ad-hoc-distribution

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

  

1)转到产品 - >方案 - >编辑方案 - >存档并设置构建   配置到Debug。

     

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

     

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

     

4)转到Product-> Archive并在归档后,单击   “分发”,然后选择“保存为企业或特别部署”。

     

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

     

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

     

7)使用iPhone配置工具将应用程序安装到   设备

     

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

     

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

     

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

我错过了什么吗?

3 个答案:

答案 0 :(得分:7)

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

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

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

(lldb) add-dsym <PathTo.dSYM>

连接后必须这样做。

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

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

(lldb) image list <AppName>

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

答案 1 :(得分:6)

Jim Ingham,谢谢你的回答。

我找到了无法调试静态库的原因。在每个Xcode项目中,都有一个名为&#34; Strip Linked Product&#34;在&#34;部署&#34;部分。在我的所有项目中,此设置已设置为&#34;是&#34;。

为了调试存档构建的应用程序的静态库,我将此设置设置为&#34;否&#34;在每个从属库项目(以及主项目)中。对于调试/释放模式,也可以设置不同。在此之后,我看到归档期间构建的库符号,我可以调试到库代码中。我希望这有助于某人。

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

答案 2 :(得分:5)

我正在努力解决同样的问题,只是从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)进入调试器 - 您应该能够看到代码,放置和使用断点等。

如果你想从一开始就调试你的代码,只需要一个休眠一两秒的循环,然后检查主函数顶部的一个标志 - 当你进入调试器时,只需更改标志让它逃脱循环。