Oracle® Developer Studio 12.5:使用 dbx 调试程序

退出打印视图

更新时间: 2016 年 6 月
 
 

缺省情况下,选定的表达式在求值前扩展宏,包括使用以下项指定的表达式:printdisplay watch 命令,stoptracewhen 命令的 –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 脚本中的宏扩展。