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

退出打印视图

更新时间: 2016 年 6 月
 
 

使用预定义变量

有一些只读的 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 的第一个字是 + (加号)或 - (减号),具体取决于是否已发生 dlopendlclose
$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。每当调试新程序时,它会先引导以便可以确定共享库的列表和位置。然后,进程将被中止。这一序列被称为“引导”。
引导过程中,所有事件仍然可用。例如,使用此变量来区分在调试运行期间发生的 syncsyncrtld 事件以及在正常运行期间发生的这些事件。
$machtype
如果已装入程序,则返回计算机类型:sparcv8sparcv8+sparcv9x86x86_64。否则,返回 unknown
$datamodel
如果已装入程序,则返回数据模型:ilp32lp64。否则,返回 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  dlopendlclose 事件有效的变量
变量
说明
$dlobj
装入对象 dlopened 或 dlclosed 的路径名
表 6  sysinsysout 事件有效的变量
变量
说明
$syscode
系统调用号
$sysname
系统调用名
表 7  proc_gone 事件有效的变量
变量
说明
$reason
signalexitkilldetach 之一
表 8  thr_create 事件有效的变量
变量
说明
$newthread
新建线程的 ID(例如 t@5
$newlwp
新建 LWP 的 ID(例如 l@4
表 9  access 事件有效的变量
变量
说明
$watchaddr
正在写入、读取或执行的地址
$watchmode
以下项之一:r 代表读取,w 代表写入,x 代表执行;后跟以下项之一:a 代表之后,b 代表之前