我在 iOS 模拟器的 lldb 调试器中,并且有一个块的地址。我想尝试执行它。我尝试了想到的第一件事(见下文),但它不起作用。有没有办法做到这一点?
(lldb) po 0x2c7140
(int) $2 = 2912576 <__NSGlobalBlock__: 0x2c7140>
(lldb) po 0x2c7140(NO, @"Test")
error: called object type 'int' is not a function or function pointer
我也尝试过call但显然这不是 llvm 中的命令?它在 gdb 中可用。
(lldb) call (void)0x2c7140(NO, @"Test")
error: 'call' is not a valid command.
我刚刚意识到第一次尝试无论如何都会失败,因为 po 不会使用 void 返回值,但问题仍然存在......
您需要将您的数字转换为块指针。
expr ((void (^)(BOOL,NSString*))0x2c7140)(NO, @"Test")
| | | | |
Return type Argument types Address Call
(expr
是 lldb 的替代品call
)
我没有实际测试过这是否有效,但已确认 lldb 可以识别强制转换。您可能需要将其分成两部分expr
命令,一个用于执行强制转换,一个用于执行调用:
expr (void (^)(BOOL,NSString*))0x2c7140
expr $n(NO, @"Test")
where $n
是第一个表达式结果的标识符,它将成为 lldb 输出的一部分。我相信你可以简单地使用$
意思是“之前的结果”,但尚未对此进行测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)