【问题标题】:Xcode Breakpoint not being triggered even though method is called即使调用方法也不会触发 Xcode 断点
【发布时间】:2021-03-04 08:44:02
【问题描述】:

我的断点似乎正在发挥作用。我发现一些断点正在触发,而另一些则没有。这是一个例子:

我尝试创建一个新的 iOS App 项目(界面:Storyboard,生命周期:UIKit App Delegate)。我所做的唯一代码更改是:

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        print("traitCollectionDidChange -- called --")
}

然后我在打印行上有一个断点。项目构建并运行,如果我更改环境覆盖以更改文本/动态类型大小,则会记录上述打印语句,但不会触发断点。

我已按照此处和其他来源的建议检查了许多不同的设置,但我不知道如何解决此问题。我检查了方案、首选项、删除了 DerivedData 文件,甚至重新安装了 xCode... 还尝试重新安装命令行开发人员工具。

我已经花了几个小时试图解决这个问题。任何帮助将不胜感激。

更新:

与此同时,我已向 Apple 记录了一个缺陷。似乎在使用 Accessibility Inspector 进行字体大小更改时,会调用 traitCollectionDidChange(就像使用 Environment Overrides 一样),但不同之处在于 Accessibility Inspector 的断点 触发。如果您返回到 Environment Overrides,那么它会“中断”可访问性检查器,然后不再调用 traitCollectionDidChange,并且也不会触发相应的断点。重建会重置此问题。

【问题讨论】:

  • 是否有其他断点被击中?如果不是 - 您是在调试模式还是发布模式下运行?
  • 是的。其他断点被击中。我只是注意到有些不是。在调试模式下运行。其他断点正在工作,但有些断点与上述不同。我无法分辨出有和没有的区别。
  • 也许它有助于将断点导出到 JSON 并检查内部是否有奇怪的东西。要导出,请在调试控制台中使用breakpoint write -f ~/breakpoints.json
  • 然后试试蛮力。我会发布一个答案,因为评论字段太小了。

标签: swift xcode breakpoints


【解决方案1】:

尝试蛮力攻击:

  1. 创建一个全局函数
func forceBreakpoint() {
    print ("breakepoint hit")
}

  1. 调用该函数
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    print("traitCollectionDidChange -- called --")
    forceBreakpoint()
}
  1. forceBreakpoint 创建一个符号断点

运行应用程序并希望断点现在命中。

【讨论】:

  • 谢谢。我实际上尝试过。尽管调用了 print 语句,但没有触发断点。不过,模拟器设备旋转确实会触发断点(以及 print 语句)。
  • 那个断点的br list 的输出是什么?你应该得到类似language = swift, locations = 1, resolved = 1, hit count =,然后是0(如果没有被击中),或者1(如果有)。
  • 这很有趣...即使 Xcode 从未在该断点处“暂停”,命中计数仍显示正确的计数 br list...。
猜你喜欢
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2010-11-02
  • 2020-04-06
  • 2020-05-06
相关资源
最近更新 更多