oracle系统事件,系统事件规范 (Oracle Solaris Studio 12.2:使用 dbx 调试程序)

系统事件规范

以下是系统事件的事件规范。

dlopen [ lib-path ] dlclose [ lib-path ]

成功执行 dlopen() 或 dlclose() 调用后会发生这些事件。执行 dlopen() 或 dlclose() 调用可能会导致装入多个库。预定义变量 $dllist 中总是有这些库的列表。$dllist 中的第一个 shell 字为 "+" 或 "-",表示是要添加还是要删除库列表。

lib-path 是共享库的名称。如果指定该名称,则只在装入或卸载了给定库时才会发生事件。在这种情况下,$dlobj 包含库的名称。$dllist 仍然可用。

如果 lib-path 以 / 开头,则将执行完整字符串匹配。否则,将只比较路径的尾部。

如果未指定 lib-path,则只要出现 dl 活动,都会发生事件。在这种情况下,$dlobj 为空,但 $dllist 有效。

fault fault

当出现指定的错误时,就会发生 fault 事件。这些错误为体系结构相关式错误。以下这组 dbx 已知的错误在 proc(4) 手册页中进行了定义。

错误说明

FLTILL非法指令

FLTPRIV特权指令

FLTBPT*断点陷阱

FLTTRACE*跟踪陷阱(单步)

FLTACCESS内存访问(如对齐)

FLTBOUNDS内存边界(无效地址)

FLTIOVF整数溢出

FLTIZDIV整数除以零

FLTPE浮点异常

FLTSTACK无法恢复的栈错误

FLTPAGE可恢复的页错误

FLTWATCH*监视点陷阱

FLTCPCOVFCPU 性能计数器溢出

注 –

dbx 使用 BPT、TRACE 和 BOUNDS 来实现断点和单步执行。处理它们时可能会干扰 dbx 的运行情况。

注 –

FLTBPT 和 FLTTRACE 会被忽略,因为它们会干扰诸如断点和单步执行等 dbx 基本功能(请参见事件安全)。

上述错误摘自 /sys/fault.h。fault 可以是上面所列错误中的任何一种(大小写、有无 FLT 前缀均可),也可以是实际的数字代码。

注 –

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

lwp_exit

退出了 lwp 时,会发生 lwp_exit 事件。$lwp 包含事件处理程序执行期间退出的 LWP(lightweight process,轻量级进程)的 ID。

注 –

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

sig signal

信号首次传送给所调试的程序时,会发生 sig signal 事件。signal 可以是十进制数或信号名(大小写均可),前缀是可选的。它与 catch 命令和 ignore 命令毫无关系,尽管 catch 命令可按如下方式实现:

function simple_catch {

when sig $1 {

stop;

echo Stopped due to $sigstr $sig

whereami

}

}注 –

收到 sig 事件时,进程尚未检测到它。只有在使用指定的信号继续执行进程时,信号才会传送给它。

sig signal sub-code

首次将具有指定 sub-code 的指定信号传送到子进程时,会发生 sig signal sub-code 事件。与信号相同,可以按十进制数形式或大小写字母形式键入 sub-code,前缀是可选的。

sysin code | name

刚启动了指定的系统调用,且进程已进入内核模式。

dbx 支持的系统调用概念是由陷阱按 /usr/include/sys/syscall.h 中的枚举提供内核系统调用。

这与系统调用的 ABI 概念不同。一些 ABI 系统调用在用户模式下得到部分实现,并且使用非 ABI 内核陷阱。但是,对于大多数普通系统调用(主要异常是信号处理),syscall.h 和 ABI 之间没有区别。

注 –

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

注 –

/usr/include/sys/syscall.h 中的一组内核系统调用陷阱属于 Solaris OS 中随发行版本而异的一个专用接口。dbx 接受的陷阱名(代码)和陷阱编号列表包括 dbx 支持的任何 Solaris OS 版本支持的所有陷阱名(代码)和陷阱编号。dbx 支持的名称不太可能与任何 Solaris OS 特定发行版本支持的名称完全一致,而且 syscall.h 中的某些名称可能不可用。任何陷阱编号(代码)均可为 dbx 接受,并可正常使用,但是,如果它与已知的系统调用陷阱不对应,系统会发出警告。

sysout code | name

已完成指定的系统调用,进程即将返回到用户模式。

注 –

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

sysin | sysout

如果不使用参数,所有系统调用都会被跟踪。某些 dbx 功能(例如 modify 事件和运行时检查)会导致子进程为其自身目的执行系统调用,并且在被跟踪时显示出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值