在 Java 模式下使用 dbx 命令
使用 dbx 调试由 Java 代码和本地代码组成的混合型代码时,dbx 命令分为以下几类:
未包括在上述任一类别的命令只在本地模式下有效。
dbx 命令中的 Java 表达式求值
在大多数 dbx 命令中使用的 Java 表达式计算器支持以下构造:
-
所有文字
-
所有名称和字段访问
-
this 和 super
-
数组访问
-
类型转换
-
条件二进制运算
-
方法调用
-
其他一元/二进制运算
-
对变量或字段赋值
-
instanceof 操作符
-
数组长度操作符
Java 表达式计算器不支持以下构造:
一种特别有用的检查 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 |
列出或设置 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 |
显示当前源代码行 |
|
在 Java 模式下有不同语法的命令
以下 dbx 命令在进行 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 版本的指定命令 |
javaclasses |
发出该命令后,输出 dbx 已知的所有 Java 类的名称 |
joff |
将 dbx 从 Java 模式或 JNI
模式切换到本地模式 |
jon |
将 dbx 从本地模式切换到 Java 模式 |
jpkgs |
发出该命令后,输出 dbx 已知的所有 Java 程序包的名称 |
native |
当 dbx 处于 Java
模式下时,用于指示将执行的是本地版本的指定命令 |
|