答案比我想象的要简单得多。最简单的方法是简单地在属性声明上添加一个断点。每当读取或写入属性时,调试器都会中断。
如果像我一样,您只想在属性更改时中断并忽略提取,请在属性声明上设置断点,然后进入 LLDB 控制台并键入“br list”以查看所有断点的列表:
(lldb) br list
Current breakpoints:
1: file = '/Users/testuser/Desktop/TestFoo/Test.swift', line = 12, locations = 3, resolved = 3, hit count = 1
1.1: where = TestFoo`TestFoo.Test.x.getter : Swift.Int + 12 at Test.swift:12, address = 0x00000001084cfefc, resolved, hit count = 1
1.2: where = TestFoo`TestFoo.Test.x.setter : Swift.Int + 16 at Test.swift:12, address = 0x00000001084cff80, resolved, hit count = 0
1.3: where = TestFoo`TestFoo.Test.x.materializeForSet : Swift.Int + 16 at Test.swift:12, address = 0x00000001084d00f0, resolved, hit count = 0
如您所见,有一个主断点“1”和三个子断点。禁用 getter 的子断点:
(lldb) br disable 1.1
1 breakpoints disabled.
一切就绪。只有当该属性被修改时,调试器才会中断。