JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:使用 dbx 调试程序     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  dbx 入门

2.  启动 dbx

3.  定制 dbx

4.  查看和导航到代码

5.  控制程序执行

6.  设置断点和跟踪

7.  使用调用堆栈

8.  求值和显示数据

9.  使用运行时检查

10.  修复并继续

11.  调试多线程应用程序

12.  调试子进程

13.  调试 OpenMP 程序

14.  处理信号

15.  使用 dbx 调试 C++

16.  使用 dbx 调试 Fortran

17.  使用 dbx 调试 Java 应用程序

18.  在机器指令级调试

19.  将 dbx 与 Korn Shell 配合使用

20.  调试共享库

A.  修改程序状态

B.  事件管理

事件处理程序

事件安全

创建事件处理程序

操作事件处理程序

使用事件计数器

设置事件规范

断点事件规范

in function

at [filename: ]line_number

at address_expression

infile filename

infunction function

inmember function inmethod function

inclass classname [-recurse | -norecurse]

inobject object-expression [-recurse | -norecurse]

数据更改事件规范

access mode address-expression [, byte-size-expression ]

change variable

cond condition-expression

系统事件规范

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

fault fault

lwp_exit

sig signal

sig signal sub-code

sysin code | name

sysout code | name

sysin | sysout

执行进度事件规范

exit exitcode

next

returns

returns function

step

其他事件规范

attach

detach

lastrites

proc_gone

prog_new

stop

sync

syncrtld

thr_create [thread_id ]

thr_exit

throw

throw type

throw -unhandled

throw -unexpected

timer seconds

事件规范修饰符

-if condition

-resumeone

-in function

-disable

-count n -count infinity

-temp

-instr

-thread thread_id

-lwp lwp_id

-hidden

-perm

分析和二义性

使用预定义变量

when 命令有效的变量

$handlerid

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

事件处理程序示例

为存储到数组成员设置断点

执行简单跟踪

在函数内时启用处理程序 (in function)

确定已执行的行数

确定源代码行执行的指令数

事件发生后启用断点

重放重置应用程序文件

检查程序状态

捕获浮点异常

C.  宏

D.  命令参考

索引

事件规范修饰符

事件规范修饰符设置处理程序的其他属性,最常见的一种是事件过滤器。修饰符必须位于事件规范的关键字部分之后。修饰符以短划线 (-) 开头。以下是有效的事件规范修饰符。

-if condition

发生事件规范指定的事件时,便会对条件进行求值。仅当条件的求值结果为非零时,处理程序才会出现副作用。

如果 -if 修饰符用于具有关联的单一源位置(如 inat)的事件,则在与该位置对应的作用域对 condition 进行求值。否则,请使用所需作用域来限定它。

根据与 print 命令相同的约定对条件执行宏扩展。

-resumeone

-resumeone 修饰符可以与 -if 修饰符一起用于多线程程序的事件规范中,这样,条件中包含函数调用时,只恢复一个线程。有关更多信息,请参见将过滤器与条件事件配合使用

-in function

该事件只会发生在到达给定 function 的第一个指令与该函数返回之间。函数的递归会被忽略。

-disable

-disable 修饰符用于创建处于禁用状态的处理程序。

-count n -count infinity

-count n-count infinity 修饰符用于使处理程序从 0 开始计数(请参见使用事件计数器)。每次发生事件时,计数便会增加,直至达到 n。达到 n 后,处理程序便会启动,且计数器重置为零。

程序运行或重新运行时,所有启用的处理程序的计数都会被重置。更确切地讲,就是在发生 sync 事件时重置计数。

在使用 debug -r 命令(请参见debug 命令)或 attach -r 命令(请参见attach 命令)开始调试新程序时会重置计数。

-temp

创建临时处理程序。发生事件后,会立即自动将其删除。缺省情况下,处理程序不是临时性的。如果处理程序是计数处理程序,则只有在计数达到 0(零)时,才会自动将其删除。

可使用 delete -temp 命令删除所有临时处理程序。

-instr

使处理程序在指令级操作。此事件取代了大多数命令的传统后缀 "i"。它通常修改事件处理程序的下列两个方面:

-thread thread_id

只有导致发生事件的线程与 thread_id 相符时,才会执行该操作。对于您考虑的特定线程,在程序的不同次执行中可能分配不同的 thread_id

-lwp lwp_id

只有在导致事件的线程与 lwp_id 相符时,才会执行该操作。只有在导致事件的线程与 lwp_id 相符时,才会执行该操作。对于您考虑的特定线程,在程序的不同次执行中可能分配不同的 lwp_id

-hidden

在常规 status 命令中隐藏处理程序。可使用 status -h 查看隐藏的处理程序。

-perm

正常情况下,装入新程序时,所有处理程序都会被抛弃。使用 -perm 修饰符可在多个调试会话中保留处理程序。不带参数的 delete 命令不会删除永久性处理程序。可使用 delete -p 删除永久性处理程序。