警告：可用文件描述符数量少 (256)。如果程序具有过多线程，则您需要
设置 mt_scalable 选项，或增加关于文件描述符数目的硬限制。请参阅
mt_scalable 的“help dbxenv”。
#  * Copyright 02/13/02 Sun Microsystems, Inc. All Rights Reserved
#
# helpfile.jdbx
#
#  javahelpfile.dbx 1.4 02/08/26
#
# This is the helpfile for the jdbx plugin
#
# The format is that of the regular dbx helpfile format.
# If help is found here for a topic, then use it when we're
# in java mode. Otherwise use what's in the regular helpfile. 
#
# If a command will appear in both this helpfile and the regular helpfile
# then don't put a one-liner here since dbx will take all the one liners
# and we don't need duplicates.
#
# I18N note below from regular dbx helpfile.
# I18N - topicnames should not be translated unless immediately preceded by
# a comment line containing "I18N"
#
# I18N - do not translate any of the command names in this file. To generate
# a list of all dbx command names, run dbx and type
#
#        commands -all
#
# Top-level help, result of `help' with no arguments
# Top level summary. use this one PLUS the dbx one.
# This one only lists the new commands added with java debugging
:command$$summary

# I18N (do not translate "jpkgs", "jclasses", "java", "native", "jon",
# "joff") from the message below.
Java 调试命令
jpkgs        jclasses     jon          joff
java         native 

其它 Java 主题
jvm_invocation   java-debugging
#
#  Next list commands available only in java mode (when we have a
#  java application loaded. 
#
:jpkgs（仅 Java 命令）
%jpkgs - 列出装入的所有 java 软件包

Jpkgs 列出了 dbx 已知的所有 Java 软件包。随着 dbx 装入更多的软件包，
该命令的输出会更改。
#
:jclasses（仅 Java 命令）
%jclasses - 列出装入的所有 java 类
#
jclasses 列出了 dbx 已知的所有 Java 类。随着 dbx 装入更多的类，该命
令的输出会更改。
:jon（仅 Java 命令）
%jon - 如当前是本地模式，则打开 Java 调试模式

jon 命令将 dbx 切换到 Java 模式。然后所有的命令在 Java 模式中执行。

另见：“help java”
#
:joff（仅 Java 命令）
%joff - 完全关闭 java 调试模式（成为普通的 dbx）

joff 将 dbx 切换到本地模式。所有命令都在普通 dbx 模式中解释，并且都
符合 c/c++ 语法。

另见：“help native”
#
# LATER 请参见错误 4885333
# LATER :javastack （仅 Java 命令）
# LATER %javastack - 转储当前 Java 操作数堆栈
# LATER 
# LATER javastack 命令转储当前 Java 操作数堆栈。该命令适用于
# LATER 字节码级调试，并仅适用于 SPARC 体系结构。
#
:java（仅 Java 命令）
%java - java <cmd>:  执行 java 版本的 <cmd>。 

命令加上前缀“java”会使得 dbx 在“java”模式中执行命令。这样将使用 
java 语法，调用 java 表达式计算，并显示 java 线程和堆栈帧。

在 JNI 代码中想要在 java 模式中执行命令时，就可以采用这种方式。

关于 java 调试的一般帮助信息，请使用命令“help java-debugging”。

#
# I18N - translate this topic name 
:java 调试（主题）

调试 java 程序：
Dbx 可以调试类和 jar 文件，以及混合模式程序。

指定 java 应用程序后，dbx 进入 Java 模式。该模式仅启用了 java 命令，并
将某些命令置入 Java 模式。

Dbx 可以在 Java 和 JNI 代码间无缝切换。

有三种模式用于调试 Java 代码。
Java 模式
JNI 模式
本地模式

调试 Java 应用程序时，dbx 处于 Java 模式中。执行 Java 应用程序时，Dbx 
在 Java 和JNI 模式之间自动切换。当处于 Java 代码内部时切换到 Java 模
式，而当停止进入 JNI 模式时则切换到 JNI 模式。

Dbx 不能自动切换到本地模式。您可以使用“joff”命令切换到本地模式，而
使用“jon”模式切换到 Java 模式。

在 Java 模式中，可以使用 Java 语法与 dbx 交互，并且 Dbx 使用 Java 语
法向您显示信息。该模式用于调试纯 java 代码或混合的 java/本地程序的 
java 部分。

在 JNI 模式中，dbx 命令使用本地语法并影响本地代码，但是命令的输出也
显示了 Java 相关状态和本地状态，因此 JNI 模式是一种“混合”模式。该
模式可用于调试 java/本地程序的本地部分。

在本地模式中，dbx 命令仅影响本地程序，而 java 的相关功能则被禁用。该
模式用于调试与 java 无关的普通程序。
 
Dbx 在 jdbx_mode 环境变量中保留当前模式。

Java 调试的环境变量：

jdbx_mode      ：可以具有以下设置:java、jni 或 native
JAVASRCPATH    ：使用该环境变量以指定 dbx 搜索 Java 源文件的位置。
                 该变量在 Java 源文件与类或 jar 文件不在一个目录的
                 情况下有用。
CLASSPATHX     ：使用该环境变量以指定类文件的路径，该类文件由定制
                 类加载器装入。
jvm_invocation ：使用该变量定制 dbx 启动 JVM 的方法。更多信息，请
                 参阅“help jvm_invocation”。

另见：调试，dbx
#
#
#
:native（仅 Java 命令）
%native - native <cmd> : 执行本地版本的 <cmd> 
#
命令加上前缀“native”会使得 dbx 在“本地”模式中执行命令。这意味着
表达式解释并显示为 C/C++ 表达式，并且某些其它命令会具有不同的输出。
例如“native where”会显示所有的本地帧。

该命令适用于在 Java 代码中执行程序的同时想要检查本地环境的情况。
#
#
# Now list the commands that are different in Java mode or have a 
# different syntax. 
# These override what is found in the main dbx helpfile.
# Don't include the one-liners here. We'll take them from the main helpfile.
#  
#
:debug（命令）
%debug - 列出或更改正在调试的程序

debug 命令列出或更改正在调试的程序。该命令装入了指定的 Java 应用程序
并开始调试该应用程序。

<prog> 之下可以是以下中的任何一个：
  <file>.class     -  调试类文件
  <jarfile>.jar    -  调试具有 Main_class 属性的 JAR 文件，该属性在 
                       manifest 文件中设置。
  jar:<url>!/<classfile>.class 
                   -  使用 JAR 文件的 JAR URL 语法，没有 manifest 
                      文件或 Main_class 属性。

注：  您必须包括 .class 或 .jar 文件扩展名。

debug                 # 打印正在调试的程序名称
debug <prog>          # 开始调试没有进程 ID <pid> 的 <prog>。
debug <prog> <pid>    # 开始调试具有进程 ID <pid> 的 <prog>。
debug -p <pid> <prog> # 开始调试具有进程 ID <pid> 的 <prog>。
                        <prog> 可以是“-”。Dbx 使用 /proc 查找它。
debug -r ...          # 开始调试 <prog> 保持所有 trace、when 和 stop 
                        命令。不加 -r 时，dbx 执行隐式的“delete all”
                        和“undisplay 0”。
debug -clone ...      # “-clone”选项使另外一个 dbx 开始执行，每次允
                        许调试多个进程。该选项仅运行在 GUI 下才是有效的。
debug -clone          # 启动另外一个 dbx 空调试。该选项仅运行在 GUI 下
                        才是有效的。
debug [<options>] -- <prog> # 即使 <prog> 以破折号开头，也启动调试 <prog>。
例如：
    (dbx) debug myclass.class
    (dbx) debug /home/mydirectory/mypkg/myclass.class
    (dbx) debug java.pkg.myclass.class
    (dbx) debug myjarfile.jar
    (dbx) debug jar:myjar.jar!/myclass.class
    (dbx) debug jar:file:/a/b/c/myjar.jar!/myclass.class

关于选项的帮助另见：“help dbx”和“help invocation”。
#
:files（命令）
%files - 列出 dbx 已知的所有 Java 源文件的名称

files 命令列出 dbx 已知的所有 Java 源文件的名称。
该命令在程序执行和装入多个类和库时可能会更改。
#
:func（命令）
%func - 列出或更改当前方法。
func                    # 打印当前方法的名称。
func qual-methodname    # 将当前方法更改为 qual-method_name

    其中 qual-methodname 是：   [classname.]method_name[(parameters)]

   classname 是有效的 java 类或软件包路径，method_name 是给定 
   classname 中的有效 Java 函数。parameters 是该方法的参数。
#
#
:run（命令）
%run - 带参数运行程序
run                     # 带参数开始执行程序
run <args>              # 带新参数开始执行程序

其中 args 参数用于正在运行的目标进程。它们被传送到 Java 应用程序，而
不是 JVM。不要将主类名称包括到参数中。 

不能使用 run 命令来重定向 Java 应用程序的输入或输出。

可以使用 Control-C 停止执行该程序。

# I18N - do not translate this 'jvm_invocation'
另见：jvm_invocation
#
#
# I18N - do _not_ translate this topic name as it is an environment variable.
:jvm_invocation
%jvm_invocation - 指定要调用的 JVM 的 dbx 环境变量。

jvm_invocation 环境变量允许您定制 dbx 的 JVM 启动。  

通常，dbx 按如下操作启动 JVM 软件：
  java -Xdebug -Xnoagent -Xrundbx_agent:sync=<pid>

如果已定义 jvm_invocation，dbx 就使用该定义。 

例如：
jvm_invocation="/myjava/java -Xdebug"

定义中必须包括“-Xdebug”选项。Dbx 将会增加其它选项。

#
# DBX will pick up the one-liner from regular dbx help file. So don't
# add a one liner here.
:attach（命令）

Dbx 可以附加到一个正在运行的 Java 进程，该进程曾提供在调试模式下
启动的 JVM。

attach <pid>                  # 开始调试进程 ID 为 <pid> 的 <prog>。
                              # dbx 使用 /proc 查找 <prog>。
attach -p <pid> <prog>        # 开始调试进程 ID 为 <pid> 的 <prog>。
attach <prog> <pid>           # 开始调试进程 ID 为 <pid> 的 <prog>。
                                <prog> 可以是 “-”；dbx 使用 /proc 发现该参数
attach -r ...                 # “-r”选项使 dbx 包含全部 display、trace、when 
                                 和 stop。如果没有“-r”选项，就执行隐式
                                 “delete all”和“undisplay 0”。
示例：
首先您必须确保 jvm 可以找到 libdbx_agent.so。然后将它增加到 
LD_LIBRARY_PATH。该文件位于安装目录下：
    <install_directory>/lib     用于 32 位应用程序
    <install_directory>/lib/v9  用于 64 位应用程序。

# note for helpfile maintainers - below, be sure to keep a space after
# the '%' below!
接下来，请按以下命令启动应用程序：
% java -Djava.compiler=NONE -Xdebug -Xnoagent -Xrundbx_agent <myjava>.class

然后您可以执行到应用程序的附加操作：启动具有应用程序进程 ID 的 dbx
% dbx - <pid>

<prog> 的格式另见：“help debug”。
#
# we have our own jdbx event specification topic
:事件$$规范（主题）
事件管理命令 stop、when 和 trace 使用事件规范来指定感兴趣的事件。 
它通常具有以下语法：

<keyword> [ <arg> ] [ <modifier> ... ]

keyword 指定事件的种类，最常用的是“at”和“in”。某些事件使用如下
所示的附加参数。以“-”开头的 modifier 可以应用于所有事件类型和命令。
但是，部分命令或事件也接受特别的 modifier。

以下事件规范语法对 Java 调试是有效的：

        access <mode> <fieldname>
                        # 由 fieldname 指定的内存（例如
                        # classname.field）已被访问。
                        # <mode> 指定如何访问内存和
                        # 如何组成一个或全部字母
                        # “r”（读取访问）
                        # “w”（写入访问）
                        # <mode> 还可以包含
                        # “b”（访问前停止。）
        at <lineno>     # 将执行 <lineno>。
        at <filename>.<lineno>
                        # 将执行 <filename> 中的 <lineno>
        classload       # 装入所有类
        classload <classname>
                        # 卸载类 <classname>
        classunload     # 卸载所有类
        classunload <classname>
                        # 装入类 <classname>
        change <classname>.<fieldname>
                        # <classname> 中的 <fieldname> 已更改
        cond <condition expression>
                        # <condition expression> 计算为 true。
        in <classname>.<method_name>
                        # 输入所有名为 <classname>.<method_name> 的方法
        in <classname>.<method_name>([parameters])
                        # 输入具有给定参数的方法 
                        # <classname>.<method_name>
        inmethod <method_name>
                        # 输入名为 <method_name> 的方法
        inmethod <method_name>([parameters])
                        # 输入名为 <method_name> 的方法，
                        # 具有给定参数
        throw           # 已抛出 Java 异常
        throw <type>    # 已抛出 <type> 的 Java 异常
                        # -unhandled 或 -unexpected 可用于 type。

以下 modifier 对于 Java 调试有效：
        -if <cond>      # 只有当 <cond> 表达式为 true 时，事件激发。
                        # 任何表达式都一直可以用于计算
                        # 整型类型。
        -count <num>    # 从 0 计数。到达 <num> 时激发事件并重置
                        # 计数器
        -count infinity # 计数但不激发。
        -temp           # 激发时删除的临时事件。
        -disable        # 在禁用状态下创建事件。
#
#
:whatis（命令）

whatis <identifier>     # 打印 identifier 的声明。如果
                        # 打印类的方法 identifier 是一 
                        # 个类，则 dbx 信息，包括所有
                        # 继承的方法。

<identifier> 可以是一个类、当前类中的方法、当前方法中的本地变量，或
当前类中的字段。
#
#
:when（命令）

when 命令执行给定事件上的命令。

when at <line> { cmd; }         # 到达 <line> 时执行命令
when in <proc> { cmd; }         # 调用 <proc> 时执行命令

“when”通常具有以下语法：

        when <event-specification> [ <modifier> ] { <cmd> ... ; }

有关所有事件的列表及语法，请参阅“help event specification”。
有关事件管理命令的一般性讨论，请参阅“help events”。

要在 dbx 为 Java 模式时设置具有本地代码的事件，请使用 joff 命令或前缀
具有“native”的“when”命令切换到本地模式。 

要在 dbx 为 JNI 模式时设置具有 Java 代码的事件，请使用 jon 命令或前缀
具有“java”的“when”命令切换到 Java 模式。 

另见：“'help jon”、“help joff”、“help java”、“help native”
#
#
:where（命令）
where [thread_id]               # 打印方法 traceback。 
where [thread_id] <num>         # 打印 traceback 中顶端 <num> 帧。
where -f [thread_id] <num>      # 从第 <num> 帧启动 traceback
where -q [thread_id]            # 快速 traceback（只具有方法名称）
where -v [thread_id]            # 冗余 traceback（包括方法 args 
                                # 行信息）


其中：
[thread_id] 是为线程指定的 dbx-style 线程 ID 或 Java 线程名称。
            如果已指定 thread_id，则将该命令执行于这个线程。
            否则将执行当前线程的命令。
#
#
:print（命令）
print <exp>, ...           # 打印表达式 <exp>，... 的值
print -r <exp>             # 打印 exp 的值，包括其继承
                           # 成员
print +r <exp>             # 不打印其继承成员，条件是
                           # dbxenv 'output_inherited_members' 打开时。
print -r <exp>             # 显示表达式 <exp> 的动态类型
print +d <exp>             # 不使用表达式 <exp> 的动态类型，条件是
                           # 当 dbxenv 'output_inherited_members' 打开时。
print -- <exp>             # '--' 表示标志参数的结束点。该命令适用于
                           # <exp> 以加号或减号开头的情况。


