首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Swift和lldb设置符号断点

使用Swift和lldb设置符号断点
EN

Stack Overflow用户
提问于 2016-10-05 01:16:38
回答 2查看 4.5K关注 0票数 8

在使用Swift时,如何在lldb中设置符号断点?例如,有时我使用:

代码语言:javascript
运行
复制
(lldb) b set -F '-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded]'

但这已经行不通了:

断点2:没有位置(挂起)。警告:无法将断点解析到任何实际位置。

我也试过

代码语言:javascript
运行
复制
(lldb) b set -F 'UIView.updateConstraintsIfNeeded()'
(lldb) b set -F 'UIView.updateConstraintsIfNeeded'

但没有爱。我猜问题归结于lldb在使用Swift时认为什么是“完全限定的函数名”。医生说:

全名(--

-F )

通过完全限定的函数名设置断点。对于C++,这意味着名称空间和所有参数;对于Objective C,这意味着具有类和选择器的完整函数原型。可以多次重复,以便为多个名称设置一个断点。

那Swift呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-05 03:59:45

当lldb设置断点时(包括-F),它需要知道目标语言,因为它所做的匹配类型依赖于此。默认情况下,lldb选择当前帧的语言,但您可以覆盖它。因此,例如,当您在Swift帧中停止时,要在ObjC符号上中断,请执行以下操作:

代码语言:javascript
运行
复制
(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符号可以挂接。

票数 7
EN

Stack Overflow用户

发布于 2018-06-10 01:57:30

在lldb控制台中,您可以给出一个部分名称,并使用regex自动查找:

代码语言:javascript
运行
复制
br set -r updateConstraintsIfNeeded\]

结果是:

代码语言:javascript
运行
复制
Breakpoint 4: where = UIKit`-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded]

在当前版本的Xcode中,您还可以在“添加符号断点”UI中使用部分名称,因为现在提供了代码完成功能来帮助您。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39858180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档