利用函数的可变长度参数列表调试系统方法

我们知道LPC语言的系统函数包括apply方法和外部函数(efun)二种,但因为驱动开发上因为历史原因并不严谨,增加了很多系统函数但并没有提供说明文档,当你想测试时不知道函数参数有哪些怎么办?

对efun比较好说,看fluffos驱动源码的packages基本都能很清楚,而且在驱动编译时也会生成一个包括所有efun的文档build/src/packages.fullspec,查看这个文档也能清楚所有efun的参数和返回值。

但对apply方法呢?看源码比较头大,我们知道方法名和调用机制后,其实可以利用函数的可变长度参数来调试。

注意这里说的可变长度参数列表不是使用varargs的函数,varargs修饰的函数相当于是几个不同固定参数的同名函数合并到一个函数上实现,函数可传的参数还是确定的。而可变长度参数是使用...语法实现,如:

void test(mixed *data...)
{
    debug_message(sprintf("data = %O", data));
}

这里函数test可以传任何类型和任何数量的参数,利用这个我们可以调试一些自己不知道参数列表的系统方法,如:

mixed can_verb_word_str(mixed *data...)
{
    debug_message(sprintf("can_verb_word_str : %O", data));
    return can_look();
}

这样在方法调用时通过打印输出可以知道参数的类型和个数。

当然,对我们多数人来说,关于所有efun和apply的文档,更简单的方式是查阅百科:https://wiki.mud.ren/

京ICP备13031296号-4