【问题标题】:How can I debug an unrecognized selector sent to an NSNull object within a AppKit method如何在 AppKit 方法中调试发送到 NSNull 对象的无法识别的选择器
【发布时间】:2015-10-07 19:47:00
【问题描述】:

我在调试器中收到了这个异常:

-[NSNull _setWithOffsetDelta:]:无法识别的选择器发送到 实例 0x7fff71d27210

这听起来很容易调试,所以我在所有 Objective-C 异常上设置了断点,并看到这个异常被抛出了这个消息:

  [textLayout drawGlyphsForGlyphRange:glyphRange atPoint:textBounds.origin];

现在这就是我迷路的地方,这是回溯中的顶部堆栈帧:

还在任何地方搜索“setWithOffsetDelta”或“withOffsetDelta”都会返回 0 个结果,所以我不知道应该由哪个对象接收此消息。

我想如果我能确定哪个对象应该接收消息,我应该已经准备好了。

我尝试在 Xcode 调试器中使用变量视图来查找引用 NSNull 的对象,但什么都看不到

有没有人可以尝试解决这个问题?

【问题讨论】:

  • 是否有特定于 Objective-C 的断点,或者您只是设置了所有异常断点?
  • Objective-C 特有的,我贴的那一行确实是抛出异常的那一行
  • 这个方法 drawGlyphsForGlyphRange 的内容是什么?
  • 我不知道,因为它是NSLayoutManager中的一个方法,AppKit提供的一个对象。我不相信我可以在任何地方查看源代码?
  • 您查看 glyphRange 了吗?你确定它没有超出范围

标签: objective-c xcode debugging selector


【解决方案1】:

使用带有“po $arg1”动作的Objective-C断点。

运行应用程序以获取断点,您将位于导致异常的行,并且错误消息将在调试器控制台中。

当您遇到异常断点时,您可能需要单击调试继续几次,您将获得回溯和更多错误信息。

【讨论】:

  • 我收到同样的错误信息 :( -[NSNull _setWithOffsetDelta:]: unrecognized selector sent to instance 0x7fff71d27210 我的问题是我不知道哪个对象应该接收该信息,所以我无法弄清楚如何修复问题
  • 您可能需要多次单步才能找到导致问题的行。
  • 但我不能,因为消息是在 AppKit 方法中发送的。除非有办法可以查看 NSLayoutManager 的源代码?
猜你喜欢
  • 2013-05-12
  • 2011-08-23
  • 2023-03-09
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2016-04-25
相关资源
最近更新 更多