如何执行从LLDB的块(由指针标识)(How to execute a block (identif

2019-09-16 17:03发布

我在iPhone模拟器内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

我也试过电话 ,但显然这不是LLVM的命令? 这是在gdb可用。

(lldb) call (void)0x2c7140(NO, @"Test")
error: 'call' is not a valid command.

我刚才意识到,第一次尝试就失败了,因为无论如何宝是不会有void返回值继续工作,但问题仍然有效...

Answer 1:

你需要转换你的电话号码,以块指针。

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")

其中$n是给定到所述第一表达,这将是LLDB的输出的一部分的结果的标识符。 我相信你可以简单地使用$来表示“与之前的结果”,但还没有测试过这一点。



文章来源: How to execute a block (identified by pointer) from lldb