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

语法

stop 命令的通用语法如下:

stop event_specification [modifier]

发生指定事件时,停止进程。

本地模式语法

下面的特定语法是在本地模式下有效的其中一些较重要的语法。有关其他事件,请参见设置事件规范

stop [ -update ]

立刻停止执行。仅在 when 命令的主体中有效。

stop -noupdate

立刻停止执行,但不更新 Oracle Solaris Studio IDE 调试器窗口。

stop access mode address_expression [, byte_size_expression ]

在访问了通过 address_expression 指定的内存时停止执行。另请参见访问地址时停止执行

stop at line-number

line_number 处停止执行。另请参见在源代码行设置 stop 断点

stop change variable

variable 的值发生了更改时停止执行。

stop cond condition_expression

condition_expression 表示的条件的求值结果为 true 时停止执行。

stop in function

调用 function 时停止执行。另请参见在函数中设置 stop 断点

stop inclass class_name [ -recurse | -norecurse ]

仅限于 C++: 对类、结构、联合或模板类的所有成员函数设置断点。-norecurse 是缺省值。如果指定 -recurse,则包括基类。另请参见在类的所有成员函数中设置断点

stop infile file_name

调用 file_name 中的任何函数时停止执行。

stop infunction name

仅限于 C++: 对所有非成员函数 name 设置断点。

stop inmember name

仅限于 C++:对所有成员函数 name 设置断点。请参见在不同类的成员函数中设置断点

stop inobject object_expression [ -recurse | -norecurse ]

仅限于 C++: 在从对象 object_expression 调用类及其所有基类的任何非静态方法的入口处设置断点。-recurse 是缺省值。如果指定 - norecurse,则不包括基类。另请参见在对象中设置断点

line_number 是源代码行的编号。

function 是函数名。

class_name 是 C++ 类、结构、联合或模板类的名称。

mode 指定内存访问模式。可由以下一个或所有字母组成:

r

已读取指定地址处的内存。

w

已写入内存。

x

已执行内存。

mode 也可以包含:

a

访问后停止进程(缺省值)。

b

访问前停止进程。

name 是 C++ 函数的名称。

object_expression 标识的是 C++ 对象。

variable 是变量名。

下列修饰符在本地模式中有效。

-if condition_expression

只有在 condition_expression 的求值结果为 true 时,才会发生指定的事件。

-in function

只有在 function 范围内发生指定事件时,执行才会停止。

-count number

从 0 开始,每次发生事件时,计数器的计数便会增加。达到 number 时,执行便停止,且计数器重置为 0。

-count infinity

从 0 开始,每次发生事件时,计数器的计数便会增加。执行没有停止。

-temp

创建发生事件时会删除的临时断点。

-disable

创建禁用状态的断点。

-instr

执行指令级变量。例如,step 变为指令级单步执行,而 at 使用文本地址而不是行号作为参数。

-perm

使相应事件在 debug 中保持持久性。有些事件(如断点)不适合保持持久性。delete all 不会删除持久性的处理程序,可使用 delete hid

-hidden

通过 status 命令隐藏事件。一些导入模块可能会选择使用它。可使用 status -h 查看它们。

-lwp lwp_id

只有在给定的 LWP 中发生指定的事件时,执行才会停止。

-thread thread_id

只有在给定的线程中发生指定的事件时,执行才会停止。

Java 模式语法

下列特定语法在 Java 模式中有效。

stop access mode class_name.field_name

访问了 class_name .field_name 指定的内存时停止执行。

stop at line_number

line_number 处停止执行。

stop at file_name:line_number

file_name 中的 line_number 处停止执行。

stop change class_name.field_name

class_name 中的 field_name 值发生了更改时停止执行。

stop classload

在加载任何类时停止执行。

stop classload class_name

装入 class_name 时停止执行。

stop classunload

在卸载任何类时停止执行。

stop classunload class_name

卸载 class_name 时停止执行。

stop cond condition_expression

condition_expression 表示的条件的求值结果为 true 时停止执行。

stop in class_name.method_name

输入了 class_name.method_name 且将要执行第一行时停止执行。如果未指定参数且重载方法,则会显示方法列表。

stop in class_name.method_name([ parameters])

输入了 class_name.method_name 且将要执行第一行时停止执行。

stop inmethod class_name.method_name

对所有非成员方法 class_name.method_name 设置断点。

stop inmethod class_name.method_name ([ parameters])

对所有非成员方法 class_name.method_name 设置断点。

stop throw

抛出了 Java 异常时停止执行。

stop throw type

抛出了 type 类型的 Java 异常时停止执行。

其中:

class_name 是 Java 类的名称,可以使用包路径(使用句点 (.) 作为限定符,例如 test1.extra.T1.Inner),也可以使用完整路径名(前面加磅符号 (#), 并使用斜线 (/) 和美元符号 ($) 作为限定符,例如 #test1/extra/T1$Inner)。如果使用 $ 限定符,请使用引号将 class_name 引起来。

condition_expression 可以是任何表达式,但其求值结果必须为整型。

field_name 是类中字段的名称。

file_name 是文件名。

line_number 是源代码行的编号。

method_name 是 Java 方法的名称。

mode 指定内存访问模式。可由以下一个或所有字母组成:

r

已读取指定地址处的内存。

w

已写入内存。

mode 也可以包含:

b

访问前停止进程。

程序计数器将指向违例指令。

parameters 是方法的参数。

type 是 Java 异常的类型。类型可以是 -unhandled-unexpected

下列修饰符在 Java 模式中有效:

-if condition_expression

只有在 condition_expression 的求值结果为 true 时,才会发生指定的事件。

-count number

从 0 开始,每次发生事件时,计数器的计数便会增加。达到 number 时,执行便停止,且计数器重置为 0。

-count infinity

从 0 开始,每次发生事件时,计数器的计数便会增加。执行没有停止。

-temp

创建发生事件时会删除的临时断点。

-disable

创建禁用状态的断点。

有关设置机器级断点的信息,另请参见stopi 命令

有关所有事件的列表和语法,请参见设置事件规范