使用预定义变量
有一些只读的 ksh 预定义变量。下表中列出的变量始终有效。
|
|
$ins
|
反汇编当前指令。
|
$lineno
|
以十进制数表示的当前行号。
|
$vlineno
|
以十进制数表示的当前“访问”行号。
|
$line
|
当前行的内容。
|
$func
|
当前函数名。
|
$vfunc
|
当前“访问”函数的名称。
|
$class
|
$func 所属类的名称。
|
$vclass
|
$vfunc 所属类的名称。
|
$file
|
当前文件名。
|
$vfile
|
被访问的当前文件的名称。
|
$loadobj
|
当前可装入对象的名称。
|
$vloadobj
|
被访问的当前可装入对象的名称。
|
$scope
|
当前 PC 在反引用符号中的作用域。
|
$vscope
|
被访问 PC 在反引用符号中的作用域。
|
$funcaddr
|
以十六进制数表示的 $func 地址。
|
$caller
|
调用 $func 的函数的名称。
|
$dllist
|
在发生 dlopen 或 dlclose 事件后,包含刚装入或卸载的装入对象的列表。dllist 的第一个字是 + (加号)或 - (减号),具体取决于是否已发生 dlopen 或 dlclose。
|
$newhandlerid
|
最近创建的处理程序的 ID。在任何删除处理程序的命令后,此变量有一个未定义的值。创建处理程序后立即使用该变量。dbx 不能针对创建多个处理程序的命令捕获所有处理程序 ID。
|
$firedhandlers
|
导致最近中断的处理程序 ID 列表。在 status 命令的输出中,该列表中的处理程序都标记有 *(星号)。
|
$proc
|
正被调试的当前进程的“进程 ID”。
|
$lwp
|
当前 LWP 的 ID。
|
$thread
|
当前线程的“线程 ID”。
|
$newlwp
|
新建 LWP 的 ID。
|
$newthread
|
新建线程的 ID。
|
$prog
|
正被调试程序的全路径名。
|
$oprog
|
$prog 的上一个值,当程序的全路径名恢复为 - (短划线)时,使用此值返回您在 exec() 之后调试的内容。$prog 扩展为全路径名时,$oprog 包含命令行中指定的程序路径或指定给 debug 命令的程序路径。如果调用 exec() 多次,则无法返回到原始程序。
|
$exec32
|
如果 dbx 二进制数为 32 位,则为 True。
|
$exitcode
|
最后运行程序的退出状态。如果进程尚未退出,则该值为空字符串。
|
$booting
|
如果在引导过程中发生事件,则会设置为 true。每当调试新程序时,它会先引导以便可以确定共享库的列表和位置。然后,进程将被中止。这一序列被称为“引导”。
引导过程中,所有事件仍然可用。例如,使用此变量来区分在调试运行期间发生的 sync 和 syncrtld 事件以及在正常运行期间发生的这些事件。
|
$machtype
|
如果已装入程序,则返回计算机类型:sparcv8、sparcv8+、sparcv9、x86 或 x86_64。否则,返回 unknown。
|
$datamodel
|
如果已装入程序,则返回数据模型:ilp32 或 lp64。否则,返回 unknown。要查找刚才装入的程序模型,请使用 .dbxrc 文件中的以下内容:
when prog_new -perm {
echo machine: $machtype $datamodel;
}
|
|
以下示例说明可以实现 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 命令主体中以及对于下表中所示的特定事件有效。
表 3 对 sig 事件有效的变量
|
|
$sig
|
触发事件的信号数
|
$sigstr
|
$sig 的名称
|
$sigcode
|
$sig 的子代码(如果适用)
|
$sigcodestr
|
$sigcode 的名称
|
$sigsender
|
信号发出方的进程 ID(如果适用)
|
|
表 4 对 exit 事件有效的变量
|
|
$exitcode
|
传递给 _exit(2) 或 exit(3) 的参数的值或 main 的返回值
|
|
表 5 对 dlopen 和 dlclose 事件有效的变量
|
|
$dlobj
|
装入对象 dlopened 或 dlclosed 的路径名
|
|
表 6 对 sysin 和 sysout 事件有效的变量
|
|
$syscode
|
系统调用号
|
$sysname
|
系统调用名
|
|
表 7 对 proc_gone 事件有效的变量
|
|
$reason
|
signal、exit、kill 或 detach 之一
|
|
表 8 对 thr_create 事件有效的变量
|
|
$newthread
|
新建线程的 ID(例如 t@5)
|
$newlwp
|
新建 LWP 的 ID(例如 l@4)
|
|
表 9 对 access 事件有效的变量
|
|
$watchaddr
|
正在写入、读取或执行的地址
|
$watchmode
|
以下项之一:r 代表读取,w 代表写入,x 代表执行;后跟以下项之一:a 代表之后,b 代表之前
|
|