【问题标题】:Is it possible to trace changes to a UIView's frame?是否可以跟踪 UIView 框架的更改?
【发布时间】:2015-03-17 18:36:10
【问题描述】:

出于调试目的,是否可以在程序运行时打印出对视图帧的更改,而无需停止调试会话?

【问题讨论】:

    标签: ios debugging uiview trace lldb


    【解决方案1】:

    您可以使用 LLDB 断点命令来执行此操作。

    (lldb) br set -S setFrame:
    Breakpoint 4: 133 locations.
    (lldb) br command add 4
    Enter your debugger command(s).  Type 'DONE' to end.
    > e (void) NSLog(@"frame change for %@:", $rdi)
    > continue
    > DONE
    (lldb) c
    Process 34698 resuming
    

    此代码访问 x86_64 寄存器 rdi 中的 self,但访问的是正确的寄存器 depends on your architecture。它通过在选择器setFrame: 的任何调用上设置断点并在触发断点时运行 LLDB 评估命令来实现这一点。然后断点命令在打印完帧后恢复执行。

    这会将帧更改输出到您应用中的任何视图。如果您想在帧发生变化时进入调试器,请忽略continue 命令。

    【讨论】:

    • 在同一时刻提出一个问题来回答它?
    • @NikosM。是的,这很常见:blog.stackoverflow.com/2011/07/…
    • 但是为什么不在frame 属性上使用KVO 并使用通常的NSLog 打印它呢?
    • @Azat 添加 KVO 观察者需要更改代码并重新编译。此方法可以在调试器会话的中间使用,无需重新启动或重新编译。
    • 我们能否将其限制为特定视图的框架更改?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    相关资源
    最近更新 更多