ios如何在不查看CoreFoundation代码的情况下进行调试
Posted
技术标签:
【中文标题】ios如何在不查看CoreFoundation代码的情况下进行调试【英文标题】:ios How to debug without seeing CoreFoundation code 【发布时间】:2015-03-12 05:07:31 【问题描述】:我希望能够单步执行我的程序,但是在单步执行一个完整的功能后,我会发送所有这些文件,上面写着CoreFoundation
,并且有许多十六进制地址包含我不明白的东西.有什么办法可以绕过这个,以便我可以继续单步执行我的程序?
我正在尝试了解在特定 UI 错误出现之前发生的所有事情,并且我已经花费了数小时尝试手动扫描代码,因为调试没有太大帮助。我也尝试对应用程序进行分析,以为我可以运行一个函数列表,但这也没有奏效。有什么建议吗?
【问题讨论】:
【参考方案1】:由于您的程序使用CoreFoundation
,它也将逐步执行。如果你想跳过某些东西,那么你需要在 call
之后立即设置一个后续的 breakpoint
去别处。你也可以试试step over
和step out
的代码呢。
要有效地使用调试器,您需要了解哪些是您不了解的。如果这太麻烦了,那么我建议您询问具体的错误本身,并让有更多调试经验的人尝试帮助您查明代码中似乎是问题的部分。
【讨论】:
我对多种语言使用调试,但 ios/obj-c 是我见过的唯一一个组合,它迫使我单步调试他们的代码和我的代码。例如,浏览 android 的 java/eclipse 中的代码不会让我在逐步完成其余工作之前运行 Android 库。我很确定我们可以就这个话题达成一致。无论如何,我正在处理一个旧项目,如果 xcode/ios 调试器在这种情况下不是唯一的,那将非常有帮助。除了在整个源代码中转储断点之外,还有其他方法吗? 如果您知道要调试的函数在哪里,那么您实际上不必放置大量断点。如果您在函数声明中设置初始breakpoint
,然后选择debug
> debug workflow
> always show disassembly
,您将在第二列中看到call
(可能经常出现)。这些是您可能想要避免的地方。在call
之前和之后设置您的breakpoints
- 当您点击它之前的那个时,程序应该停止。点击continue
,调试器进入CoreFoundation或其他任何地方,然后回到你在它后面设置breakpoint
的地方。
还有一些其他可用的调试器和反汇编器,您可能会发现它们更直观。调试通常并不容易,我绝对可以从你想要切入正题的意义上看出你来自哪里。不幸的是,除非您是一位经验丰富的逆向工程师,或者只是对代码的工作方式非常有洞察力,否则大部分代码都需要大量单步执行和设置断点。我认为 XCode 中的调试工具确实非常好,尤其是在它如何显示变量设置的值、线程活动等方面。
是的,“反汇编”是我想要避免的,希望我可以从我的一个函数的末尾转到下一个被调用的函数的开头。再次说明这是几年前的代码形式,要么是我忘记编写的代码,要么是其他人编写的代码。它太多了,以至于我需要无数个小时才能一步一步地走过所有事情。添加事件处理,即使尝试也是浪费精力,所以我希望调试可以帮助我简化流程。
是您要调试的代码的一个特定区域,还是整个项目,是否存在您要查找的错误/崩溃?我很乐意为您提供一些可能对您有所帮助的建议。 (或者让它更容易忍受,我猜你可以说)。以上是关于ios如何在不查看CoreFoundation代码的情况下进行调试的主要内容,如果未能解决你的问题,请参考以下文章
dyld:库未加载:/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
UIKitCore、CoreFoundation 等缺少 dSYM