All*_*uer 32 delphi xcode ios lldb
我需要在实际设备上调试ios应用程序的启动...并且通过启动我的意思是当操作系统控制应用程序时执行的第一条指令.不是"主要".此外,此应用程序没有任何符号(即调试信息不可用..).我不在乎是否必须在CPU指令级调试.我知道该怎么做(已经做了30多年).我希望调试器在控件即将传输到应用程序时停止.当我使用Attach | by Name命令运行时,它只是说"完成运行".
哦,这个应用程序不是在XCode中构建的.然而,它是我构建,签名和配置并移动到设备的应用程序.应用程序运行,因为我可以看到控制台输出.万一你以为我是一个黑客试图调试别人的应用程序.
这对于一个高级订单怎么样?我敢打赌,没有人可以回答这个问题......我无法找到任何有关如何使用XCode构建的项目执行此操作的信息.我想知道苹果霸主是否根本不可能或"允许"它?
你怎么说,Stack Overflow众神?
更新:我应该澄清一些事情.此应用程序不是使用任何商用或开源工具构建的.我与工具供应商合作创建编译器,框架和IDE.IOW,你不能得到这个工具...... 在引导新工具链的过程中,必须经常采用一些非常低级的原始调试.特别是如果工具生成的代码中存在错误.
All*_*uer 23
我将回答我自己的问题,因为我认为我偶然发现了一个解决方案.如果有人比这更优雅和简单,请回答.到了步骤:
从原始的单片iOS可执行文件开始(不是捆绑的.app,而是实际的二进制mach-o文件,即机器代码).
假设GDB能够评估断点表达式并设置断点,并且您选择了"产品|调试工作流程|调试时显示反汇编",则该过程应该在应用程序中要执行的第一条指令处中断.
您现在可以单步执行指令并使用GDB控制台来获取/设置寄存器值.
您的问题没有意义 - main 是应用程序的入口点。这是应该遇到的第一个代码,除非您可能为某些类覆盖了initialize()(但即使如此,我认为 main 也会在运行时之前被命中)。
我认为您在启动时看到某种奇怪的错误,并且您认为您想在入口处设置一个断点来捕获它,但更可能对您有帮助的是在启动时描述问题,并让 4000 人中的一个已经看到并修复了相同的崩溃,可以帮助您...
但是,如果您确实想使用 GDB 来中断没有符号的应用程序(但从 XCode 启动),您可以按照以下方式让 GDB 在程序集地址上中断:
要查找 main (或其他方法)的地址,您可以使用工具或 atos,此问题中的一些示例:
添加:
如果由于某种原因 XCode 无法启动您的应用程序进行调试,您还可以越狱并在设备本身上安装 GDB,这将完全控制调试。如果 XCode 可以启动你的应用程序,我认为没有理由能够在任意内存地址处中断不能为你提供你所寻求的能力......
| 归档时间: |
|
| 查看次数: |
4936 次 |
| 最近记录: |