Solaris 模块调试器指南

mdb_getopts()

int mdb_getopts(int argc, const mdb_arg_t *argv, ...);

解析和处理指定参数数组 (argv) 中的选项和选项参数。 argc 参数表示参数数组的长度。此函数按顺序处理每个参数,然后停止和返回无法处理的第一个参数的数组索引。 如果成功处理了所有参数,则返回 argc

argcargv 参数后面,mdb_getopts() 函数接受参数(说明应出现在 argv 数组中的选项)的变量列表。 每个选项都由一个选项字母(char 参数)、一种选项类型(uint_t 参数)以及一个或两个附加参数来说明,如下表所示。选项参数列表以 NULL 参数结尾。 类型应为以下类型之一:

MDB_OPT_SETBITS

该选项将指定的位 OR 到标志字中。该选项由以下参数说明:

char c, uint_t type, uint_t bits, uint_t *p

如果类型为 MDB_OPT_SETBITS,而且在 argv 列表中检测到选项 c,则调试器将位 OR 到指针 p 引用的整数中。

MDB_OPT_CLRBITS

该选项从标志字中清除指定的位。该选项由以下参数说明:

char c, uint_t type, uint_t bits, uint_t *p

如果类型为 MDB_OPT_CLRBITS,而且在 argv 列表中检测到选项 c,则调试器将从指针 p 引用的整数中清除位。

MDB_OPT_STR

该选项接受字符串参数。该选项由以下参数说明:

char c, uint_t type, const char **p

如果类型为 MDB_OPT_STR,而且在 argv 列表中检测到选项 c,则调试器在 p 引用的指针中存储指向 c 后面的字符串参数的指针。

MDB_OPT_UINTPTR

该选项接受 uintptr_t 参数。该选项由以下参数说明:

char c, uint_t type, uintptr_t *p

如果类型为 MDB_OPT_UINTPTR,而且在 argv 列表中检测到选项 c,则调试器在 p 引用的 uintptr_t 中存储 c 后面的整数参数。

MDB_OPT_UINT64

该选项接受 uint64_t 参数。该选项由以下参数说明:

char c, uint_t type, uint64_t *p

如果类型为 MDB_OPT_UINT64,而且在 argv 列表中检测到选项 c,则调试器在 p 引用的 uint64_t 中存储 c 后面的整数参数。

例如,以下源代码:

int

dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)

{

        uint_t opt_v = FALSE;

        const char *opt_s = NULL;



        if (mdb_getopts(argc, argv,

            'v', MDB_OPT_SETBITS, TRUE, &opt_v,

            's', MDB_OPT_STR, &opt_s, NULL) != argc)

                return (DCMD_USAGE);



        /* ... */

}
说明如何在 dcmd 中使用 mdb_getopts(),以接受布尔选项 "-v"(它将 opt_v 变量设置为 TRUE)和选项 "-s"(它接受存储在 opt_s 变量中的字符串参数)。如果在返回给调用方之前,mdb_getopts() 函数检测到选项字母无效或者缺少选项参数,则它还会自动发出警告消息。在 dcmd 完成时,调试器将自动对参数字符串和 argv 数组的存储进行垃圾收集。