Я использую lldb для отладки службы на основе obj c. несколько точек останова (которые установлены, были помещены в код, и я вижу, что одна из них достигается неожиданно в соответствии с трассировкой стека.
Метод, инкапсулирующий эту точку останова, не должен был вызываться, но я все еще вижу его в трассировке стека (file1.mm:97), хотя кажется, что код там не выполняется.
Я подозреваю, что obj c внутренний метод __Block_byref_object_copy_
отвечает за копирование блока кода, который включает в себя как вызывающий, так и вызываемый методы (MyClass из верхнего кадра в стеке и метод в file1.mm:97).
При копировании отладчик, вероятно, думает, что он достигает этой строки для выполнения и останавливается там, где на самом деле это только для копирования блока кода, который включает эти 2 метода.
Возможно, кто-нибудь может поддержать это утверждение или предоставить дополнительное объяснение, почему я получаю эту точку останова там, где она не должна возникать?
* frame #0: 0x0000000107e03ce0 MyLib`::__Block_byref_object_copy_((null)=0x00007fda19a86b30, (null)=0x00007ffeea7f3bd0) at file1.mm:97:27
frame #1: 0x00007fff7de6bb78 libsystem_blocks.dylib`_Block_object_assign + 325
frame #2: 0x0000000107dd960a MyLib`::__copy_helper_block_ea8_32r((null)=0x00007fda19a86540, (null)=0x00007ffeea7f3ba8) at file2.mm:47:55
frame #3: 0x00007fff7de6b9f3 libsystem_blocks.dylib`_Block_copy + 104
frame #4: 0x00007fff7c64e1e8 libobjc.A.dylib`objc_setProperty_atomic_copy + 53
frame #5: 0x00007fff5411d16b Foundation`-[NSXPCConnection _sendInvocation:orArguments:count:methodSignature:selector:withProxy:] + 1885
frame #6: 0x00007fff54168508 Foundation`-[NSXPCConnection _sendSelector:withProxy:arg1:arg2:] + 125
frame #7: 0x00007fff54168485 Foundation`_NSXPCDistantObjectSimpleMessageSend2 + 46
frame #8: 0x0000000107e0520e MyLib`::-[MyClass func:withVar0:Var1:Var2:withError:](self=0x00007fda17c2cb50, _cmd="funcWithVar0:Var1:Var2:Var3:withError:", var0="aaa", var1=0x0000000000000000, var2="bbb", var3=0x00007fda17d41dd0, err=0x00007ffeea7f4258) at MyClass.mm:196:5
ОБНОВЛЕНИЕ:
благодаря комментариям ниже, если я установил точку останова в соответствии с упорядочивая файл и строку, он дает мне 3 места (!?)
набор точек останова --file myfile.mm --line 97
теперь, когда я перечисляю свои точки останова, он дает мне 2 точки останова, не относящиеся к фактическому методу, который обертывает файл, за исключением ожидаемой точки останова.
3.2: where = my class`::__Block_byref_object_copy_() + 16 at myfile:97:27, address = 0x0000000107e03ce0, unresolved, hit count = 0
3.3: where = myclass `::__Block_byref_object_dispose_() + 16 at myfile:97:27, address = 0x0000000107e03d40, unresolved, hit count = 0