【问题标题】:Setting debugger breakpoints across all methods in an Xcode project在 Xcode 项目的所有方法中设置调试器断点
【发布时间】:2016-05-25 03:45:17
【问题描述】:

您如何跟踪在特定用户流中跨不同文件调用的所有方法?

在不同的点放置断点并观察回溯似乎不是最有效的方法。

相反,我想 -

1) 在感兴趣的项目中的所有方法中设置断点。

2) 让所有断点运行一个调试器命令,打印出文件名和方法名。

3) 编辑断点,使程序在断点被命中后继续执行。 (当您编辑特定的 断点。)所以我们不会在任何断点处停止。

4) 禁用所有断点,直到达到我需要处理的流程。

5) 在开始流程之前启用所有断点。 使用这种方法,我们不必手动在不同的地方放置断点来了解执行流程。流程完成后,我可以查看调试器控制台并找出执行流程。

现在,问题 - 我们如何使用 lldb 命令来做到这一点? 希望有任何意见/建议。

【问题讨论】:

  • 考虑 dtrace(可能带有仪器)

标签: ios xcode debugging lldb


【解决方案1】:

使用 Xcode 断点接口无法做到这一点,但在 lldb 控制台中可以做到:

(lldb) break set -r . -s AppName
Breakpoint 1: 478 locations.
(lldb) br com add
Enter your debugger command(s).  Type 'DONE' to end.
> bt 
> continue 
> DONE
(lldb)

这会在名为 AppName 的二进制/共享库中的所有名称(“.”匹配所有内容)上设置一个“符号名称匹配正则表达式断点”。如果您不使用 -s 选项,它将匹配所有位置的所有符号。这会奏效,但速度很慢......

该命令打印回溯并继续。

这只会产生一个断点,所以你可以这样做:

(lldb) break disable 1

直到你需要它,然后启用它:

(lldb) break enable 1

如果你只想捕获一些方法,你可以调整正则表达式,如果你发现你对你正在命中的某些地方不感兴趣,你可以单独禁用你所做的断点内的位置方式。

(lldb) break list 1

将向您显示所有位置,并且:

(lldb) break disable 1.2-1.10 1.15

等等。将禁用位置。

这可能会有点慢,因为您的应用将一直在启动和停止。但它会满足你的要求。

【讨论】:

    【解决方案2】:

    您可以在不同文件中的所有方法上设置断点,并单击 Stepover 来跟踪该方法中的执行情况。

    Step over -  shortcut - f6, it stops execution at next loc.
    

    您也可以通过在输出窗口中输入 "po VariableName" 来检查特定变量或数组的值。

    【讨论】:

      【解决方案3】:

      您可以通过添加符号异常断点来添加相关方法名称。

      【讨论】:

        猜你喜欢
        • 2012-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-18
        • 2011-07-01
        • 1970-01-01
        • 2011-03-16
        • 2019-01-15
        相关资源
        最近更新 更多