使用 dbx 调试由 Java 代码和本地代码组成的混合型代码时,dbx 命令分为以下几类:
第一类命令:接受相同的参数,而且在 Java 模式或 JNI 模式下的运行方式与本地模式下相同(请参见在 Java 模式和本地模式下具有完全相同语法和功能的命令)。
第二类命令:具有仅在 Java 模式或 JNI 模式下有效的参数,或者仅在本地模式下有效的参数(请参见在 Java 模式下有不同语法的命令))。
第三类命令:仅在 Java 模式或 JNI 模式下有效(请参见只在 Java 模式下有效的命令)。
未包括在上述任一类别的命令只在本地模式下有效。
在大多数 dbx 命令中使用的 Java 表达式计算器支持以下构造:
所有文字
所有名称和字段访问
this 和 super
数组访问
类型转换
条件二进制运算
方法调用
其他一元/二进制运算
对变量或字段赋值
instanceof 操作符
数组长度操作符
Java 表达式计算器不支持以下构造:
限定的 this,例如 <ClassName>.this
类实例创建表达式
数组创建表达式
字符串并置操作符
条件操作符 ?:
复合赋值操作符,例如 x += 3
一种特别有用的检查 Java 应用程序状态的方式是在 IDE 或 dbxtool 中使用监视功能。
建议不要依赖表达式中作用不限于检查数据的精确值语义。
只有在 JVM 软件启动后,有关 Java 应用程序的许多信息才可正常使用,并且执行完 Java 应用程序后,这些信息将不再使用。但是,使用 dbx 调试 Java 应用程序时,dbx 会在启动 JVM 软件前从属于系统类路径和用户类路径的类文件和 JAR 文件中收集其需要的一些信息。这样 dbx 便可在您运行应用程序前更好地对断点进行错误检查。
有些 Java 类及其属性可能无法通过类路径进行访问。dbx 可以检查并逐步执行这些类,这些类被装入后,表达式解析器便可以访问它们。但它收集的信息是临时性的,JVM 软件终止后便不再可用。
dbx 调试 Java 应用程序所需的某些信息在任何地方均无记录,因此,dbx 会在调试代码期间浏览 Java 源文件来取得这些信息。
以下 dbx 命令在 Java 模式下和本地模式下具有相同的语法并执行相同的操作。
命令 |
功能 |
---|---|
attach |
将 dbx 连接到正在运行的进程,从而停止执行并将程序置于调试控制之下 |
cont |
使进程继续执行 |
dbxenv |
列出或设置 dbx 环境变量 |
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 |
显示当前源代码行 |
以下 dbx 命令在进行 Java 调试时所用的语法与进行本地代码调试时所用的语法不同,而且在 Java 模式下的运行方式也与本地模式下的运行方式不同。
命令 |
本地模式功能 |
Java 模式功能 |
---|---|---|
assign |
为程序变量赋新值 |
为局部变量或参数赋新值 |
call |
调用过程 |
调用方法 |
dbx |
启动 dbx |
启动 dbx |
debug |
装入指定应用程序,然后开始调试该应用程序 |
装入指定 Java 应用程序,接着检查类文件是否存在,然后开始调试应用程序 |
detach |
使目标进程脱离 dbx 的控制 |
使目标进程脱离 dbx 的控制 |
display |
在每个停止点对表达式求值并打印。 |
在每个停止点对表达式、局部变量或参数求值并打印 |
files |
列出与某个正规表达式匹配的文件名 |
列出 dbx 已知的所有 Java 源文件 |
func |
列出或更改当前函数 |
列出或更改当前方法 |
next |
单步执行一个源代码行(步过调用) |
单步执行一个源代码行(步过调用) |
|
打印表达式的值 |
打印表达式、局部变量或参数的值。 |
run |
带参数运行程序 |
带参数运行程序 |
step |
单步执行一个源代码行或语句(正在步入调用) |
单步执行一个源代码行或语句(正在步入调用) |
stop |
设置源码级断点 |
设置源码级断点 |
thread |
列出或更改当前线程 |
列出或更改当前线程 |
threads |
列出所有线程 |
列出所有线程 |
trace |
显示执行的源代码行、函数调用或变量更改 |
显示执行的源代码行、函数调用或变量更改 |
undisplay |
撤消 display 命令 |
撤消 display 命令 |
whatis |
打印表达式类型或类型声明 |
打印标识符声明 |
when |
指定事件发生时执行命令 |
指定事件发生时执行命令 |
where |
打印调用栈 |
打印调用栈 |
以下 dbx 命令仅在 Java 模式或 JNI 模式下有效。
命令 |
功能 |
---|---|
java |
当 dbx 处于 JNI 模式下时,用于指示将执行的是 Java 版本的指定命令 |
javaclasses |
发出该命令后,打印 dbx 已知的所有 Java 类的名称 |
joff |
将 dbx 从 Java 模式或 JNI 模式切换到本地模式 |
jon |
将 dbx 从本地模式切换到 Java 模式 |
jpkgs |
发出该命令后,打印 dbx 已知的所有 Java 程序包的名称 |
native |
当 dbx 处于 Java 模式下时,用于指示将执行的是本地版本的指定命令 |