Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何从lldb执行块(由指针标识)_Objective C_Objective C Blocks_Lldb - Fatal编程技术网

Objective c 如何从lldb执行块(由指针标识)

Objective c 如何从lldb执行块(由指针标识),objective-c,objective-c-blocks,lldb,Objective C,Objective C Blocks,Lldb,我在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 我刚刚意

我在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

我刚刚意识到,第一次尝试无论如何都会失败,因为po不会使用无效返回值,但问题仍然存在…

您需要将数字转换为块指针

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输出的一部分。我相信您可以简单地使用
$
来表示“以前的结果”,但尚未测试此结果。

我现在无法完全测试此结果。尝试它会给我:错误:块支持已禁用-使用-fblock编译或选择支持它们的部署目标。不过,这似乎是向前迈出的一步。我会继续给牦牛刮胡子,所以我也没试过。我认为这是因为我试图连接到一个正在运行的进程,但可能这个版本的lldb不支持执行块。
expr (void (^)(BOOL,NSString*))0x2c7140
expr $n(NO, @"Test")