首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件符的Swift Xcode 11断点不起作用

条件符的Swift Xcode 11断点不起作用
EN

Stack Overflow用户
提问于 2020-01-27 23:58:16
回答 2查看 848关注 0票数 2

我试图在XCode中添加一个符号断点,以检查后台线程上的UI引擎修改。

我要做的是:

但是,我得到的错误消息总是:

代码语言:javascript
复制
Stopped due to an error evaluating condition of breakpoint 5.1: "!Thread.isMainThread"
Couldn't parse conditional expression:
error: use of undeclared identifier 'Thread'

UI Engine must be modified on main thread.

我不明白为什么断点条件不能评估我的状况。有人能解释我在这里做错了什么吗?我也试过把这个放到Obj里,结果没什么好运气。

编辑:Obj版本,这里:!(BOOL)[NSThread isMainThread]

编辑2: Xcode版本11.3 (11C29)

编辑3:好,关闭XCode并重新打开使Obj版本“工作”--它们每次在断点上停顿4到5分钟。这实际上使这些断点不可用。不知道怎么解决这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-28 20:32:05

我能够让您原来的符号断点按预期工作,方法是将条件写为

代码语言:javascript
复制
(BOOL)[NSThread isMainThread] == NO

我怀疑有一个更好的方法,把BOOL和NO直接比较是非常糟糕的风格,但至少它让我通过了“不工作”阶段到“确实有效”阶段。

票数 2
EN

Stack Overflow用户

发布于 2020-01-28 05:14:02

为了澄清,设置符号断点和使用条件确实有效,但我会冒险说self和Thread不能作为UIKit框架的大部分符号使用,因为其中大多数都没有可用的调试信息,因此出现了错误:使用未声明的标识符'Thread‘。

见这篇文章的答案:

How to log out self when add a symbol breakpoint at -[UIViewController viewWillAppear] method

还有关于为子类创建符号断点以及使用objective条件的可能解决方法的其他信息如下:

Using of symbolic breakpoints for child classes in Xcode?

尽管如此,如果您只对调用该方法(layoutSubviews)的模块中的特定类感兴趣,则可以在符号断点内指定模块,并且如果您有该方法的自己的实现(例如,您在类代码中重写了该方法),则条件Thread.isMainThread或!Thread.isMainThread实际上将适用于该类。

我知道这实际上并不能解决您的困境,特别是当您需要检查layoutSubviews的所有调用时,但我希望它至少有助于解释为什么使用线程的条件不总是有效的。

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

https://stackoverflow.com/questions/59940581

复制
相关文章

相似问题

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