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

在 Java 模式下使用 dbx 命令

使用 dbx 调试由 Java 代码和本地代码组成的混合型代码时,dbx 命令分为以下几类:

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

dbx 命令中的 Java 表达式求值

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

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 模式下的运行方式也与本地模式下的运行方式不同。

命令  

本地模式功能  

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 模式下时,用于指示将执行的是本地版本的指定命令