Sun Studio 12 Update 1:使用 dbx 调试程序

使用预定义变量

有一些只读的 ksh 预定义变量。以下变量始终有效:

变量  

定义  

$ins

反汇编当前指令。 

$lineno

以十进制数表示的当前行号。 

$vlineno

以十进制数表示的当前“访问”行号。 

$line

当前行的内容。 

$func

当前函数名。 

$vfunc

当前“访问”函数的名称。 

$class

$func 所属类的名称。

$vclass

$vfunc 所属类的名称。

$file

当前文件名。 

$vfile

被访问的当前文件的名称。 

$loadobj

当前可装入对象的名称。 

$vloadobj

被访问的当前可装入对象的名称。 

$scope

当前 PC 在反引用符号中的作用域。 

$vscope

被访问 PC 在反引用符号中的作用域。 

$funcaddr

以十六进制数表示的 $func 地址。

$caller

调用 $func 的函数的名称。

$dllist

在发生 dlopendlclose 事件后,包含刚装入或卸载的装入对象的列表。dllist 的第一个字符根据发生的是 dlopen 还是 dlclose 为 "+" 或 "-"。

$newhandlerid

最近创建的处理程序的 ID。在任何删除处理程序的命令后,此变量有一个未定义的值。创建处理程序后立即使用该变量。dbx 不能针对创建多个处理程序的命令捕获所有处理程序 ID。

$firedhandlers

导致最近中断的处理程序 ID 列表。在 status 命令的输出中,该列表中的处理程序都标记有 "*"。

$proc

正被调试的当前进程的“进程 ID”。 

$lwp

当前 LWP 的 Lwp ID。 

$thread

当前线程的“线程 ID”。 

$newlwp

新建的 LWP 的 lwp ID。 

$newthread

新建线程的线程 ID。 

$prog

正被调试程序的完整路径名。 

$oprog

$prog 恢复为 "-" 时的上一个 $prog 值,用于在执行 exec() 后返回到以前调试的内容。$prog 扩展为完整路径名时,$oprog 包含命令行中指定的程序路径或指定给 debug 命令的程序路径。如果调用 exec() 多次,则无法返回到原始程序。

$exec32

如果 dbx 二进制数为 32 位,则为 True。

$exitcode

最后运行程序的退出状态。如果进程尚未退出,则该值为空字符串。 

$booting

如果在“引导”过程中发生事件,则会设置为 true。每当调试新程序时,它会先引导以便可以确定共享库的列表和位置。然后,进程将被中止。这一序列被称为引导。

引导过程中,所有事件仍然可用。例如,使用此变量来区分在调试运行期间发生的 syncsyncrtld 事件以及在正常运行期间发生的这些事件。

例如,可以这样实现 whereami


function whereami {
  echo Stopped in $func at line $lineno in file $(basename $file)
  echo "$lineno\t$line"
}

when 命令有效的变量

以下变量仅在 when 命令的主体中有效。

$handlerid

在执行主体过程中,$handlerid 是主体所属 when 命令的 ID。下列命令是等价的:


when X -temp { do_stuff; }
when X  { do_stuff; delete $handlerid; }

when 命令和特定事件有效的变量

某些变量仅在 when 命令主体中以及对于下表中所示的特定事件有效。

表 B–1 对 sig 事件有效的变量

变量  

说明  

$sig

触发事件的信号数 

$sigstr

$sig 的名称

$sigcode

$sig 的子代码(如果适用)

$sigcodestr

$sigcode 的名称

$sigsender

信号发出方的进程 ID(如果适用) 

表 B–2 对 exit 事件有效的变量

变量  

说明  

$exitcode

传递给 _exit(2)exit(3) 的参数的值或 main 的返回值

表 B–3 对 dlopendlclose 事件有效的变量

变量 

说明 

$dlobj

装入对象 dlopened 或 dlclosed 的路径名 

表 B–4 对 sysinsysout 事件有效的变量

变量 

说明 

$syscode

系统调用号 

$sysname

系统调用名 

表 B–5 对 proc_gone 事件有效的变量

变量 

说明 

$reason

signal、exit、kill 或 detach 之一 

表 B–6 对 thr_create 事件有效的变量

变量 

说明 

$newthread

新建线程的 ID(例如 t@5

$newlwp

新建 LWP 的 ID(例如 l@4

表 B–7 对 watch 事件有效的变量

变量 

说明 

$watchaddr

正在写入、读取或执行的地址 

$watchmode

以下项之一:r 代表读取,w 代表写入,x 代表执行;后跟以下项之一:a 代表之后,b 代表之前