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 overstep 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

如何在不重启Yarn服务的情况下启用DEBUG日志记录

UIKitCore、CoreFoundation 等缺少 dSYM

如何在不设置面板标题的情况下使 p:dashboard 组件可拖动

Java程序如何在不定义main方法的情况下运行?

如何在不暴露源代码的情况下将 SDK 分发为 AAR 文件?