在使用Swift时,如何在lldb中设置符号断点?例如,有时我使用:
(lldb) b set -F '-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded]'
但这已经行不通了:
断点2:没有位置(挂起)。警告:无法将断点解析到任何实际位置。
我也试过
(lldb) b set -F 'UIView.updateConstraintsIfNeeded()'
(lldb) b set -F 'UIView.updateConstraintsIfNeeded'
但没有爱。我猜问题归结于lldb在使用Swift时认为什么是“完全限定的函数名”。医生说:
全名(--
-F )
通过完全限定的函数名设置断点。对于C++,这意味着名称空间和所有参数;对于Objective C,这意味着具有类和选择器的完整函数原型。可以多次重复,以便为多个名称设置一个断点。
那Swift呢?
发布于 2016-10-05 03:59:45
当lldb设置断点时(包括-F),它需要知道目标语言,因为它所做的匹配类型依赖于此。默认情况下,lldb选择当前帧的语言,但您可以覆盖它。因此,例如,当您在Swift帧中停止时,要在ObjC符号上中断,请执行以下操作:
(lldb) break set -F '-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded]' -L objc
Breakpoint 3: where = UIKit`-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded], address = 0x0000000100963acc
或者,您可以使用-n
break选项,该选项不会尝试理解它匹配的符号,而只是在符号名称中广泛搜索该字符串。
注意,在这种情况下,您需要中断objc符号,而不是它在Swift中出现的方式,因为swift side实际上只是到ObjC中的一个填充程序,并且没有真正的swift side符号可以挂接。
发布于 2018-06-10 01:57:30
在lldb控制台中,您可以给出一个部分名称,并使用regex自动查找:
br set -r updateConstraintsIfNeeded\]
结果是:
Breakpoint 4: where = UIKit`-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded]
在当前版本的Xcode中,您还可以在“添加符号断点”UI中使用部分名称,因为现在提供了代码完成功能来帮助您。
https://stackoverflow.com/questions/39858180
复制相似问题