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

退出打印视图

更新时间: 2016 年 6 月
 
 

在 Java 模式下使用 dbx 命令

未包括在上述任一类别的命令只在本地模式下有效。

dbx 命令中的 Java 表达式求值

    大多数 dbx 命令中使用的 Java 表达式计算器可支持以下构造:

  • 所有文字

  • 所有名称和字段访问

  • thissuper

  • 数组访问

  • 类型转换

  • 条件二进制运算

  • 方法调用

  • 其他一元/二进制运算

  • 对变量或字段赋值

  • instanceof 运算符

  • 数组长度操作符

    Java 表达式计算器不支持以下构造:

  • 限定的 this,例如 <ClassName>.this

  • 类实例创建表达式

  • 数组创建表达式

  • 字符串并置操作符

  • 条件操作符 ?:

  • 复合赋值操作符,例如 x += 3

一种特别有用的检查 Java 应用程序状态的方式是在 IDE 或 dbxtool 中使用监视功能。

不要依赖于表达式中的精确值语义,它们的工作远不仅限于检查数据。

dbx 命令使用的静态信息和动态信息

只有在 JVM 软件启动后,有关 Java 应用程序的许多信息才可正常使用,并且执行完 Java 应用程序后,这些信息将不再使用。但是,使用 dbx 调试 Java 应用程序时,dbx 会在启动 JVM 软件前从属于系统类路径和用户类路径的类文件和 JAR 文件中收集其需要的一些信息。此信息可使 dbx 在您运行应用程序之前,对断点执行更好的错误检查。

有些 Java 类及其属性可能无法通过类路径访问。dbx 可检查并单步执行这些类,表达式解析器则可在这些类于运行时装入后对它们进行访问。但它收集的信息是临时性的,JVM 软件终止后便不再可用。

dbx 调试 Java 应用程序所需的某些信息在任何地方均无记录,因此,dbx 会在调试代码期间浏览 Java 源文件来取得这些信息。

在 Java 模式和本地模式下具有完全相同语法和功能的命令

下表中列出的 dbx 命令在 Java 模式下和本地模式下具有相同的语法并执行相同的操作。

命令
功能
attach
dbx 连接到正在运行的进程,从而停止执行并将程序置于调试控制之下
cont
使进程继续执行
dbxenv
列出或设置 dbxenv 变量
delete
删除断点和其他事件
down
将调用堆栈下移(远离 main
dump
输出过程或方法的所有局部变量
file
列出或更改当前文件
frame
列出或更改当前堆栈帧号
handler
修改事件处理程序(断点)
import
dbx 命令库中导入命令
line
列出或更改当前行号
list
显示源文件的行
next
单步执行一个源代码行(步过调用)
pathmap
将一个路径名映射到另一个路径名,以查找源文件等
proc
显示当前进程的状态
prog
管理正被调试的程序和它们的属性
quit
退出 dbx
rerun
不带参数运行程序
runargs
更改目标进程的参数
status
列出事件处理程序(断点)
step up
向上单步执行并步出当前函数或方法
stepi
单步执行一个计算机指令(步入调用)
up
将调用堆栈上移(靠近 main
whereami
显示当前源代码行

在 Java 模式下有不同语法的命令

下表中列出的 dbx 命令在进行 Java 调试时所用的语法与进行本地代码调试时所用的语法不同,而且在 Java 模式下的运行方式也与本地模式下的运行方式不同。

命令
本地模式功能
Java 模式功能
assign
为程序变量赋新值
为局部变量或参数赋新值
call
调用过程
调用方法
dbx
启动 dbx
启动 dbx
debug
装入指定应用程序,然后开始调试该应用程序
装入指定 Java 应用程序,接着检查类文件是否存在,然后开始调试应用程序
detach
使目标进程脱离 dbx 的控制
使目标进程脱离 dbx 的控制
display
在每个停止点对表达式求值并输出
在每个停止点对表达式、局部变量或参数求值并输出
files
列出与某个正规表达式匹配的文件名
列出 dbx 已知的所有 Java 源文件
func
列出或更改当前函数
列出或更改当前方法
next
单步执行一个源代码行(步过调用)
单步执行一个源代码行(步过调用)
print
输出表达式的值
输出表达式、局部变量或参数的值
run
带参数运行程序
带参数运行程序
step
单步执行一个源代码行或语句(正在步入调用)
单步执行一个源代码行或语句(正在步入调用)
stop
设置源代码级断点
设置源代码级断点
thread
列出或更改当前线程
列出或更改当前线程
threads
列出所有线程
列出所有线程
trace
显示执行的源代码行、函数调用或变量更改
显示执行的源代码行、函数调用或变量更改
undisplay
撤消 display 命令
撤消 display 命令
whatis
输出表达式类型或类型声明
输出标识符声明
when
指定事件发生时执行命令
指定事件发生时执行命令
where
输出调用堆栈
输出调用堆栈

只在 Java 模式下有效的命令

下表中列出的 dbx 命令仅在 Java 模式或 JNI 模式下有效。

命令
功能
java
dbx 处于 JNI 模式下时,用于指示将执行的是 Java 版本的指定命令
jclasses
发出该命令后,输出 dbx 已知的所有 Java 类的名称
joff
dbx 从 Java 模式或 JNI 模式切换到本地模式
jon
dbx 从本地模式切换到 Java 模式
jpkgs
发出该命令后,输出 dbx 已知的所有 Java 程序包的名称
native
dbx 处于 Java 模式下时,用于指示将执行的是本地版本的指定命令