缺省情况下,选定的表达式在求值前扩展宏,包括使用以下项指定的表达式:print、display 和 watch 命令,stop、trace 和 when 命令的 –if 选项,以及 $[] 构造。宏扩展还适用于 IDE 或 dbxtool 中的气球表达式求值和监视。
宏扩展适用于 assign 命令中的变量和表达式。
在 call 命令中,宏扩展适用于正被调用的函数的名称以及正在传递的参数。
macro 命令可以采用任意表达式和宏,并可以扩展宏。 例如:
(dbx) macro D(1, 2) Expansion of: D(1, 2) is: d(1,2)
如果赋予 whatis 命令一个宏,则它显示宏的定义。 例如:
(dbx) whatis B #define B(x) b(x)
如果赋予 which 命令一个宏,则它显示作用域中当前活动的宏在何处定义。 例如:
(dbx) which B2 `a.out`macro_wh.c`B2 # defined at defs2.h:3 # included from defs1.h:3 # included from macro_wh.c:23
如果赋予 whereis 命令一个宏,则它显示已定义宏的所有位置。 该列表只限于 dbx 已读取调试信息的模块。例如:
(dbx) whereis U macro: U # defined at macro_wh.c:21 macro: U # undefined at defs1.h:5
dbxenv 变量 macro_expand 控制这些命令是否扩展宏。 缺省情况下,它设置为 on。
一般情况下,dbx 命令中的 +m 选项会导致命令跳过宏扩展。–m 选项强制进行宏扩展,即使 dbxenv 变量 macro_expand 设置为 off 也是如此。$[] 构造中的 –m 选项是一个例外,其中 –m 仅使宏被扩展,不进行求值。该例外有助于 shell 脚本中的宏扩展。