我在 Xcode 中使用跳转命令设置了一个断点来强制传递某些条件,但是当它执行到第 168 行时,它崩溃并显示消息
"Thread 1: EXC_BAD_ACCESS (code=1, address=0x1)"
为什么会发生这种事?
控制台记录:
警告: MoreMultitypeCollectionViewCell.swift:178 在此函数中出现多次,选择第一个位置:
MoreMultitypeCollectionViewCell.(updateButtonStateCkeck in _9A12557DCAB30EEB52DC7C2EA09487CD)() -> () + 1580 at MoreMultitypeCollectionViewCell.swift:178
MoreMultitypeCollectionViewCell.(updateButtonStateCkeck in _9A12557DCAB30EEB52DC7C2EA09487CD)() -> () + 1600 at MoreMultitypeCollectionViewCell.swift:178
我的问题是:
- 我应该如何输入 lldb 来选择位置?
- 有没有更好的方法强制传递到 If 语句而不更改代码并重建项目?
- 有时,当我在 lldb 中输入“po”或在变量视图中单击“打印描述”时,它会显示失败消息,这是怎么回事?
1)在lldb中,等效命令是thread jump
您可以在那里指定地址和行号。
2) thread jump
或 Xcode 等效项本质上是危险的操作。如果您跳过某些变量的初始化,您现在将处理错误的数据,并且可能会崩溃。有时你可以通过眼睛发现这种情况 - 尽管 Swift 在初始化方面很懒,所以变量的实际初始化可能不会发生在你认为在源代码中发生的地方。还有更微妙的问题。例如,如果您跳过一些作为其操作副产品保留或释放对象的代码,则该对象最终将低于或超过保留。前者会导致崩溃,后者会导致内存泄漏。这些保留和释放是由编译器生成的,因此您无法在源代码中看到它们,但如果您查看要跳过的代码的反汇编,则可以看到它们。
如果不查看相关代码,我无法判断为什么这个特定的跳转会导致崩溃。
但是您无法 100% 安全地跳过编译器选择发出的某些代码。查看反汇编,您可能能够发现(a)在跳转之前有一个更好的停止位置 - 即停止经过一些导致问题的保留或释放,或者跳转到行中间的地址,这样您仍然可以调用需要保留。你必须手动解决这个问题。
3)没有足够的信息来回答这个问题。
顺便说一句,您的图像链接似乎无法解析。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)