我定义了一个非常有用的宏.gdbinit
define rc
call (int)[$arg0 retainCount]
end
有没有为lldb定义相同的宏?
我定义了一个非常有用的宏.gdbinit
define rc
call (int)[$arg0 retainCount]
end
有没有为lldb定义相同的宏?
您可以使用 lldb 中的以下命令定义来执行此操作:
command regex rc 's/(.+)/print (int)[%1 retainCount]/'
例子:
(lldb) rc indexPath
print (int)[indexPath retainCount]
(int) $2 = 2
您可以将其放入~/.lldbinit
(并重新启动 Xcode)。
人们应该认为像
command alias rc print (int)[%1 retainCount]
应该可以工作,但正如我无法让这个简单的 LLDB 别名工作中所解释的那样, %1 扩展不适用于表达式,并且command regex
是一种解决方法。
顺便说一句,在函数参数通过寄存器(x86_64、armv7)传递的架构上,lldb 定义了一系列寄存器别名,这些别名映射到用于传递整数值的寄存器——arg1、arg2 等。例如,
#include <stdio.h>
int main ()
{
char *mytext = "hello world\n";
puts (mytext);
return 0;
}
我们可以很容易地看到传入 puts 的参数,而无需记住 ABI 约定,
4 char *mytext = "hello world\n";
-> 5 puts (mytext);
6 return 0;
7 }
(lldb) p mytext
(char *) $0 = 0x0000000100000f54 "hello world\n"
(lldb) br se -n puts
Breakpoint created: 2: name = 'puts', locations = 1, resolved = 1
(lldb) c
Process 2325 resuming
Process 2325 stopped
libsystem_c.dylib`puts:
-> 0x7fff99ce1d9a: pushq %rbp
0x7fff99ce1d9b: movq %rsp, %rbp
0x7fff99ce1d9e: pushq %rbx
0x7fff99ce1d9f: subq $56, %rsp
(lldb) p/x $arg1
(unsigned long) $2 = 0x0000000100000f54
(lldb)
x86_64 和 armv7 都在寄存器中传递前“少数”整数值——除此之外,它们可以存储在堆栈或其他地方,并且这些别名不起作用。lldb 目前没有为浮点参数提供类似的便利别名。但对于最常见的情况,这涵盖了人们的需求。