gpt4 book ai didi

swift - 在xcode中用调试器Commend跳转断点

转载 作者:搜寻专家 更新时间:2023-11-01 06:58:56 24 4
gpt4 key购买 nike

我在 Xcode 中用跳转命令做了一个断点以强制传递一些条件,但是当它执行到第 168 行时它崩溃并显示消息

"Thread 1: EXC_BAD_ACCESS (code=1, address=0x1)"

enter image description here

enter image description here

为什么会这样?

控制台记录:

警告:MoreMultitypeCollectionViewCell.swift:178 在此函数中多次出现,选择第一个位置:

MoreMultitypeCollectionViewCell.(updateButtonStateCkeck in _9A12557DCAB30EEB52DC7C2EA09487CD)() -> () + 1580 at MoreMultitypeCollectionViewCell.swift:178

MoreMultitypeCollectionViewCell.(updateButtonStateCkeck in _9A12557DCAB30EEB52DC7C2EA09487CD)() -> () + 1600 at MoreMultitypeCollectionViewCell.swift:178

我的问题是:

  1. 我应该如何输入 lldb 来选择位置?
  2. 有没有更好的方法强制传递到 If 语句而不更改代码和重建项目?
  3. 有时,当我在 lldb 中键入“po”或在变量 View 中单击打印描述时,它会显示失败消息,这是怎么回事?

最佳答案

1) 在 lldb 中,等效命令是线程跳转,您可以在那里指定地址和行号。

2) thread jump 或 Xcode 等价物是一种固有的危险操作。如果你跳过一些变量的初始化,你现在将处理坏数据并且很可能会崩溃。有时您可以通过眼睛发现这种事情——尽管 Swift 对初始化很懒惰,因此变量的实际初始化可能不会发生在您认为它在源代码中发生的地方。还有更微妙的问题。例如,如果您跳过一些作为其操作的副产品保留或释放对象的代码,该对象将最终保留不足或保留过多。前者会导致崩溃,后者会导致内存泄漏。这些保留和释放是由编译器生成的,因此您无法在源代码中看到它们,但如果您查看正在跳过的代码的反汇编,则可以。

如果不查看有问题的代码,我无法说出为什么这个特定的跳转会导致崩溃。

但是您不能 100% 安全地跳过编译器选择发出的某些代码。查看反汇编,您可能会发现 (a) 在跳转之前停止的更好位置 - 即停止经过导致问题的某些保留或释放,或者跳转到一行中间的地址,这样您仍然可以调用需要的保留。您必须手动解决这个问题。

3) 没有足够的信息来回答这个问题。

顺便说一句,您的图片链接似乎无法解析。

关于swift - 在xcode中用调试器Commend跳转断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51738228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com