Oracle Solaris Studio 12.2:使用 dbx 调试程序

其他事件规范

以下是其他类型事件的事件规范。

attach

dbx 已成功连接到进程。

detach

dbx 已成功与所调试的程序分离。

lastrites

所调试的进程即将过期,原因如下:

触发此事件时,通常(但并非总是)会有进程的最终状态,从而提供了检查进程状态的最后机会。在此事件后恢复执行会终止进程。


注 –

在 Linux 平台上不能使用 lastrites 事件。


proc_gone

dbx 不再与调试的进程关联时,会发生 proc_gone 事件。预定义变量 $reason 可以是 signalexitkilldetach

prog_new

由于执行 follow exec 而装入了新程序时,会发生 prog_new 事件。


注 –

此事件的处理程序始终永久性存在。


stop

进程已停止。每当进程停止以便用户收到提示(尤其是为了响应 stop 处理程序)时,都会发生 stop 事件。例如,以下命令是等效的:


display x
when stop {print x;}

sync

刚使用 exec() 执行了所调试的进程。在 a.out 中指定的所有内存均有效且存在,但预装入的共享库尚未装入。例如,尽管 printf 可供 dbx 使用,但尚未映射到内存中。

对此事件执行 stop 不起作用,但可以将 sync 事件与 when 命令一起使用。


注 –

在 Linux 平台上不能使用 sync 事件。


syncrtld

在执行 sync(或 attach,如果所调试的进程尚未处理共享库)后,会发生 syncrtld 事件。它在动态链接程序启动代码已经执行且所有预装入共享库的符号表都已装入之后、.init 段中的任何代码运行之前执行。

针对此事件执行 stop 不起作用,但可以将 syncrtld 事件与 when 命令一起使用。

thr_create [thread_id ]

创建了线程或具有指定 thread_id 的线程后,会发生 thr_create 事件。例如,在以下 stop 命令中,线程 ID t@1 是指执行创建线程,而线程 ID t@5 是指被创建线程。


stop thr_create t@5 -thread t@1

thr_exit

线程退出后,会发生 thr_exit 事件。要捕获特定线程的退出,请使用 stop 命令的 -thread 选项,如下所示:


stop thr_exit -thread t@5

throw

每当应用程序抛出任何不是未处理的异常或意外的异常时,都会发生 throw 事件。


注 –

在 Linux 平台上不能使用 throw 事件。


throw type

如果为 throw 事件指定了异常 type,则只有该类型的异常会导致发生 throw 事件。

throw -unhandled

-unhandled 是一种特殊的异常类型,表示会抛出但没有相应处理程序的异常。

throw -unexpected

-unexpected 是一种特殊的异常类型,表示该异常不符合抛出它的函数的异常规范。

timer seconds

所调试的程序运行了 seconds 时,会发生 timer 事件。用于此事件的计时器与 collector 命令共享。精度为毫秒,因此,seconds 可以为浮点值(例如 0.001)。