int mdb_getopts(int argc, const mdb_arg_t *argv, ...);
解析和处理指定参数数组 (argv) 中的选项和选项参数。 argc 参数表示参数数组的长度。此函数按顺序处理每个参数,然后停止和返回无法处理的第一个参数的数组索引。 如果成功处理了所有参数,则返回 argc。
在 argc 和 argv 参数后面,mdb_getopts() 函数接受参数(说明应出现在 argv 数组中的选项)的变量列表。 每个选项都由一个选项字母(char 参数)、一种选项类型(uint_t 参数)以及一个或两个附加参数来说明,如下表所示。选项参数列表以 NULL 参数结尾。 类型应为以下类型之一:
该选项将指定的位 OR 到标志字中。该选项由以下参数说明:
char c, uint_t type, uint_t bits, uint_t *p
如果类型为 MDB_OPT_SETBITS,而且在 argv 列表中检测到选项 c,则调试器将位 OR 到指针 p 引用的整数中。
该选项从标志字中清除指定的位。该选项由以下参数说明:
char c, uint_t type, uint_t bits, uint_t *p
如果类型为 MDB_OPT_CLRBITS,而且在 argv 列表中检测到选项 c,则调试器将从指针 p 引用的整数中清除位。
该选项接受字符串参数。该选项由以下参数说明:
char c, uint_t type, const char **p
如果类型为 MDB_OPT_STR,而且在 argv 列表中检测到选项 c,则调试器在 p 引用的指针中存储指向 c 后面的字符串参数的指针。
该选项接受 uintptr_t 参数。该选项由以下参数说明:
char c, uint_t type, uintptr_t *p
如果类型为 MDB_OPT_UINTPTR,而且在 argv 列表中检测到选项 c,则调试器在 p 引用的 uintptr_t 中存储 c 后面的整数参数。
该选项接受 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 数组的存储进行垃圾收集。