Dav*_*uma 3 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
Run Code Online (Sandbox Code Playgroud)
我也试过电话,但显然这不是llvm的命令?它在gdb中可用.
(lldb) call (void)0x2c7140(NO, @"Test")
error: 'call' is not a valid command.
Run Code Online (Sandbox Code Playgroud)
我刚才意识到第一次尝试无论如何都会失败,因为po无法使用void返回值,但问题仍然存在......
ugh*_*fhw 10
您需要将数字转换为块指针.
expr ((void (^)(BOOL,NSString*))0x2c7140)(NO, @"Test")
| | | | |
Return type Argument types Address Call
Run Code Online (Sandbox Code Playgroud)
(expr是lldb的替代品call)
我实际上没有测试过这个有效,但已经确认lldb会识别出演员.您可能需要将其拆分为两个expr命令,一个用于执行转换,另一个用于执行调用:
expr (void (^)(BOOL,NSString*))0x2c7140
expr $n(NO, @"Test")
Run Code Online (Sandbox Code Playgroud)
其中$n是第一个表达式结果的标识符,它将是lldb输出的一部分.我相信你可以简单地$用来表示"以前的结果",但没有测试过.
| 归档时间: |
|
| 查看次数: |
2123 次 |
| 最近记录: |