.gdbinit中的可变别名?

时间:2011-08-05 18:48:06

标签: iphone xcode gdb alias variadic

这可能吗?

要举一个具体的例子,请考虑以下宏:

define pos
po ([self $arg0])
end

所以现在如果我输入pos文本,它会变成po [self text]。但是有了多个论点,它失败了,例如pos textLabel文本变为po [self textLabel]而不是所需的po [[self textLabel] text]。

再举一个例子,就像三个命令一样

po someIvar_
po [self someMethod]
po [[self someMethod]someOtherMethod] 

打印出所引用的三个对象的描述,定义一个对整数做同样事情的宏pi是很好的,即

pi [self someMethod] 

与调用

相同
print (int)[self someMethod], 

类似
pi [[self someMethod]someOtherMethod].

2 个答案:

答案 0 :(得分:1)

用户定义的命令在执行之前只是字符串替换。您的示例pos textLabel text将两个参数传递给仅考虑一个参数的命令。第二个被扔掉了。它应该在执行前产生po [self textLabel]。您所做的与以下java-sum函数相似:
int sum(int[] args){return args.get(0);}

你需要的是...... mentioned here

define pos
    if $argc == 1
        po [self $arg0]
    end
    if $argc == 2
        po [[self $arg0] $arg1]
    end
    ..... (as many you need)
end

我没有找到任何一种循环。所以这应该是唯一的方法,除了可以从args中弹出arg0并允许用户定义命令的递归调用。但我认为更容易完成上面的例子。

pi应以同样的方式实施

define pi
    if $argc == 1
        print (int)[self $arg0]
    end
    if $argc == 2
        print (int)[[self $arg0] $arg1]
    end
    ....
end

也许有更好的解决方案,但这会让您向目的地迈进一步。

答案 1 :(得分:0)

如果您正在尝试使用 PO PI 终端中的命令可以查看对象的值,或者您希望在运行时更改该值,因此以下是解决方案:

现在,这是调试和分析XCode 4中目标c代码的最佳解决方案。如果要在运行时更改变量的值,只需单击“运行>显示>表达式”即可轻松更改。 .. 在那里你可以为你的变量名提供价值。

但我怀疑你的问题不是Objective-C问题,但我仍然尽力提供解决方案。