我的应用程序存在一些问题,只有当我安装它时才会重现,但如果我只是从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安装并运行该应用程序 相反,所有断点都被击中了。
我错过了什么吗?
答案 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)
我找到了无法调试静态库的原因。在每个Xcode项目中,都有一个名为&#34; Strip Linked Product&#34;在&#34;部署&#34;部分。在我的所有项目中,此设置已设置为&#34;是&#34;。
为了调试存档构建的应用程序的静态库,我将此设置设置为&#34;否&#34;在每个从属库项目(以及主项目)中。对于调试/释放模式,也可以设置不同。在此之后,我看到归档期间构建的库符号,我可以调试到库代码中。我希望这有助于某人。
不幸的是(或者幸运的是)我试图调试的错误不会在库符号被剥离时再现。当符号被剥离时可能会发生某些事情,我需要进一步调查。
答案 2 :(得分:5)
我正在努力解决同样的问题,只是从Xcode启动我的应用程序不是一个选项 - 我必须构建IPA,在iOS设备上加载它,然后调试。最终,我能够通过以下步骤完成这项工作:
1)将方案归档目标设置为Debug
2)更改Debug版本的以下设置
3)将生成的IPA文件重建,存档并部署到iOS设备。
4)启动应用程序,在Xcode中选择Debug / Attach to Process / YourAppName(id)
5)进入调试器 - 您应该能够看到代码,放置和使用断点等。
如果你想从一开始就调试你的代码,只需要一个休眠一两秒的循环,然后检查主函数顶部的一个标志 - 当你进入调试器时,只需更改标志让它逃脱循环。