デフォルトでは、選択された式は、評価される前にマクロ展開されます。これには、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 に設定されている場合でも、マクロ展開を強制します。1 つの例外は、$[] 構造内の –m オプションです。その場合は、–m マクロが展開されるだけで、評価は実行されません。この例外により、シェルスクリプトでのマクロ展開が容易になります。