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

附录 C 命令参考

本附录提供了所有 dbx 命令的详细语法和功能说明。

assign 命令

在本地模式中,assign 命令用于为程序变量赋新值。在 Java 模式中,assign 命令用于为局部变量或参数赋新值。

本地模式语法

assign variable = expression

其中:

expression 是赋给 variable 的值。

Java 模式语法

assign identifier = expression

其中:

class_name 是 Java 类的名称,可以使用包路径(使用句点 (.) 作为限定符,例如 test1.extra.T1.Inner),也可以使用完整路径名(前面加磅符号 (#), 并使用斜线 (/) 和美元符号 ($) 作为限定符,例如 #test1/extra/T1$Inner)。如果使用 $ 限定符,请使用引号将 class_name 引起来。

expression 是有效的 Java 表达式。

field_name 是类中字段的名称。

identifier 是一个局部变量或参数,包括 this、当前类实例变量 (object_name.field_name) 或类(静态)变量 (class_name.field_name)。

object_name 是 Java 对象的名称。

attach 命令

attach 命令用于将 dbx 连接到运行中的进程,停止执行并将程序置于调试控制下。在本地模式和 Java 模式中,它的语法和功能相同。

语法

attach process_id

使用进程 ID process_id 开始调试程序。dbx 使用 /proc 查找程序。

attach -p process_id program_name

使用进程 ID process_id 开始调试 program_name

attach program_name process_id

使用进程 ID process_id 开始调试 program_nameprogram_name 可为 ‐,dbx 使用 /proc 查找它。

attach -r ...

使用 -r 选项时,dbx 保留所有 watch 命令、display 命令、when 命令以及 stop 命令。如果不使用 -r 选项,则执行隐式 delete all 命令和 undisplay 0 命令。

其中:

process_id 是运行中的进程的进程 ID。

program_name 是正在运行的程序的路径名。

Procedure连接到运行中的 Java 进程

  1. 通过将 libdbx_agent.so 添加到 LD_LIBRARY_PATH 确保 JVM 软件可以找到 libdbx_agent.solibdbx_agent.so

    • 如果要在运行 Solaris OS 的系统上使用 32 位版本的 JVM 软件,请将 /installation_directory/libdbx_agent.so 添加至 LD_LIBRARY_PATH

    • 如果在运行 Solaris OS 且基于 SPARC 的系统上使用 64 位版本的 JVM 软件,则将 /installation_directory/lib/v9/libdbx_agent.so 添加至 LD_LIBRARY_PATH

    • 如果在运行 Solaris OS 或 Linux OS 且基于 x64 的系统上使用 64 位版本的 JVM 软件,则将 /installation_directory/lib/amd64/libdbx_agent.so 添加至 LD_LIBRARY_PATH

    installation_directory 是 Oracle Solaris Studio 软件的安装位置。

  2. 通过键入以下命令启动 Java 应用程序:

    java -Djava.compiler=NONE -Xdebug -Xnoagent -Xrundbx_agent myclass.class

  3. 然后,可以启动 dbx 并使用进程 ID 连接到进程:

    dbx -process_id

bsearch 命令

bsearch 命令用于在当前源文件中向后搜索。仅在本地模式中有效。

语法

bsearch string

在当前文件中向后搜索 string。

bsearch

使用上一搜索字符串重复搜索。

其中:

string 是字符串。

call 命令

在本地模式中,call 命令用于调用过程。在 Java 模式中,call 命令用于调用方法。

本地模式语法

call procedure ([parameters]) [-lang language] [-resumeone]

其中:

language 是被调用过程的语言。

procedure 是过程的名称。

parameters 是过程的参数。

也可以使用 call 命令调用函数;要查看返回值,请使用 print 命令(请参见print 命令)。

有时,调用的函数会到达断点。可以选择使用 cont 命令继续执行(请参见cont 命令),或使用 pop -c 中止调用(请参见pop 命令)。被调用函数引发段故障时,也可以使用后者。

-lang 选项用于指定被调用过程的语言并告知 dbx 使用指定语言的调用约定。要被调用的过程先前编译时未显示调试信息并且 dbx 不知道如何传递参数的情况下,此选项很有用。

-resumeone 选项表示调用过程时仅恢复一个线程。有关更多信息,请参见恢复执行

Java 模式语法

call [class_name.|object_name.] method_name ([parameters]}

其中:

class_name 是 Java 类的名称,可以使用包路径(使用句点 (.) 作为限定符,例如 test1.extra.T1.Inner),也可以使用完整路径名(前面加磅符号 (#),并使用斜线 (/) 和美元符号 ($) 作为限定符;例如 #test1/extra/T1$Inner)。如果使用 $ 限定符,请使用引号将 class_name 引起来。

object_name 是 Java 对象的名称。

method_name 是 Java 方法的名称。

parameters 是方法的参数。

有时,调用的方法会到达断点。可以选择使用 cont 命令继续执行(请参见cont 命令),或使用 pop -c 中止调用(请参见pop 命令)。如果被调用方法引发段故障,也可以使用后者。

cancel 命令

cancel 命令用于取消当前信号。它主要用在 when 命令的主体中(请参见when 命令)。仅在本地模式中有效。

dbx 由于某个信号而停止时,信号通常会被取消。如果 when 命令已与信号事件连接,则信号不会被自动取消。可以使用 cancel 命令显式取消信号。

语法

cancel

catch 命令

catch 命令用于捕获指定的信号。仅在本地模式中有效。

如果进程收到指定信号,则捕获该信号将导致 dbx 停止运行程序。如果在该点继续运行程序,则程序不会处理该信号。

语法

catch

输出已捕获信号的列表。

catch number number ...

捕获编号为 number 的信号。

catch signal signal ...

捕获名为 signal 的信号。但无法捕获或忽略 SIGKILL

catch $(ignore)

捕获所有信号。

其中:

number 是信号的编号。

signal 是信号名。

check 命令

check 命令用于启用检查内存访问、泄漏或使用,并输出运行时检查 (runtime checking, RTC) 的当前状态。仅在本地模式中有效。

由此命令启用的运行时检查功能可由 debug 命令重置为其初始状态。

语法

check -access

打开访问检查。RTC 报告下列错误:

baf

错误释放

duf

重复释放

maf

未对齐释放

mar

未对齐读

maw

未对齐写

oom

内存不足

rob

从数组越界内存中读

rua

从未分配的内存中读

rui

从未初始化的内存中读

wob

写入到数组越界内存

wro

写入到只读内存

wua

写入到未分配内存

缺省行为是在检测到每个访问错误后停止进程,可使用 rtc_auto_continue dbx 环境变量对此进行更改。如果设置为 on,访问错误将记录到一个文件(文件名由 dbx 环境变量 rtc_error_log_file_name 控制)中。请参见dbxenv 命令

缺省情况下,每个独特访问错误只在第一次发生时进行报告。可使用 dbx 环境变量 rtc_auto_suppress(此变量的缺省设置为 on)更改此行为。请参见dbxenv 命令

check -leaks [-frames n] [-match m]

打开泄漏检查。RTC 报告下列错误:

aib

可能的内存泄漏-指针仅指向块中央

air

可能的内存泄漏-仅寄存器中存在指向块的指针

mel

内存泄漏 - 没有指针指向块

启用了泄漏检查时,程序退出时会自动生成泄漏报告。届时将报告包括可能的泄漏在内的所有泄漏。缺省情况下,会生成简短报告(由 dbx 环境变量 rtc_mel_at_exit 控制)。但可以随时获取泄漏报告(请参见showleaks 命令)。

-frames n 表示在报告泄漏时,最多显示 n 个不同的栈帧。-matchm 用于合并泄漏;如果两个或更多泄漏分配时的调用栈与 n 帧匹配,则在一个合并泄漏报告中报告这些泄漏。

n 的缺省值为 8 或 m 的值(取较大值)。n 的最大值为 16。m 在 C++ 中的缺省值为 3,在其他程序语言中为 2。

check -memuse [-frames n] [-match m]

-memuse 选项的行为与 -leaks 选项类似,还会启用在程序退出时生成 "blocks in use" 报告 (biu)。缺省情况下,会生成简短的使用的块报告(由 dbx 环境变量 rtc_biu_at_exit 控制)。在程序执行过程中,可以随时查看程序中内存的分配位置(请参见showmemuse 命令)。

-frames n 表示在报告内存使用和泄漏时,最多将显示 n 个不同的栈帧。-match m 用于合并这些报告;如果两个或更多泄漏分配时的调用栈与 m 帧匹配,则在一个合并内存泄漏报告中报告这些泄漏。

n 的缺省值为 8 或 m 的值(取较大值)。n 的最大值为 16。m 在 C++ 中的缺省值为 3,在其他程序语言中为 2。另请参见 check -leaks

check -all [-frames n] [-match m]

等效于 check -accesscheck -memuse [-frames n] [-match m]

dbx 环境变量 rtc_biu_at_exit 的值不随 check -all 变化,因此在缺省情况下,退出时不生成内存使用报告。有关环境变量 rtc_biu_at_exit 的说明,请参见dbx 命令

check [functions] [files] [loadobjects]

等效于 functionsfilesloadobjects 中的 check -all、suppress all 或 unsuppress all

其中:

functions 是一个或多个函数名。

files 是一个或多个文件名。

loadobjects 是一个或多个装入对象名。

您可使用此命令将运行时检查用于需要的地方。


注 –

为了检测所有错误,RTC 不要求使用 -g 编译程序。但是,有时为了保证准确检测某些错误(通常是从未初始化的内存中读取),需要使用符号 (-g) 信息。因此,如果未提供符号信息,某些错误(a.outrui,共享库的 rui + aib + air)会被禁止。可通过使用 suppressunsuppress 更改此行为。


clear 命令

clear 命令用于清除断点。仅在本地模式中有效。

使用 stop 命令、trace 命令或者 when 命令以及 inclass 参数、inmethod 参数、infile 参数或 infunction 参数创建的事件处理程序会创建多组断点。如果在 clear 命令中指定的 line 与这些断点之一匹配,则只清除相应断点。一旦按此方法清除了属于某断点集的单个断点,将无法再启用该断点。但是,禁用并再次启用相关的事件处理程序将重建所有断点。

语法

clear

清除当前停止点的所有断点。

clear line

清除 line 处的所有断点。

clear filename:line

清除 filenameline 处的所有断点。

其中:

line 是源代码行的编号。

filename 是源代码文件的名称。

collector 命令

collector 命令用于收集性能数据,以供性能分析器进行分析。仅在本地模式中有效。

语法

collector command_list

指定一个或多个收集器命令

collector archive options

指定在实验终止时对其进行归档的模式(请参见collector archive 命令)。

collector dbxsample options

控制在 dbx 停止目标进程时是否收集抽样数据(请参见collector dbxsample 命令)。

collector disable

停止数据收集并关闭当前实验(请参见collector disable 命令)。

collector enable

启用收集器并打开新实验(请参见collector enable 命令)。

collector heaptrace options

启用或禁用收集堆跟踪数据(请参见collector heaptrace 命令

collector hwprofile options

指定硬件计数器文件配置设置(请参见collector hw_profile 命令)。

collector limit options

限制记录的文件配置数据量(请参见collector limit 命令)。

collector mpitrace options

启用或禁用收集 MPI 跟踪数据(请参见collector mpitrace 命令)。

collector pause

停止收集性能数据,但让实验保持打开状态(请参见collector pause 命令)。

collector profile options

指定用于收集调用栈文件配置数据的设置(请参见collector profile 命令)。

collector resume

在暂停后开始收集性能数据(请参见collector resume 命令)。

collector sample options

指定抽样设置(请参见collector sample 命令)。

collector show options

显示当前收集器设置(请参见collector show 命令)。

collector status

查询有关当前实验的状态(请参见collector status 命令)。

collector store options

实验文件控制和设置(请参见collector store 命令)。

collector synctrace options

指定用于收集线程同步等待跟踪数据的设置(请参见collector synctrace 命令)。

collector tha options

指定用于收集线程分析程序数据的设置(请参见collector tha 命令)。

collector version

报告将用于收集数据的 libcollector.so 的版本(请参见collector version 命令)。

其中:

options 是可在各命令中指定的设置。

要开始收集数据,请键入 collector enable

要关闭数据收集,请键入 collector disable

collector archive 命令

collector archive 命令用于指定实验终止时要使用的归档模式。

语法

collector archive on|off|copy

缺省情况下,使用正常归档。如果不归档,请指定 off。要将装入对象复制到实验中以方便移植,请指定 copy

collector dbxsample 命令

collector dbxsample 命令指定当 dbx 停止进程时是否记录抽样数据。

语法

collector dbxsample on|off

缺省情况下,当 dbx 停止进程时,收集抽样数据。如果此时不收集抽样数据,请指定 off

collector disable 命令

collector disable 命令用于停止收集数据,并关闭当前实验。

语法

collector disable

collector enable 命令

collector enable 命令用于启用收集器,并打开新实验。

语法

collector enable

collector heaptrace 命令

collector heaptrace 命令指定用于收集堆跟踪(内存分配)数据的选项。

语法

collector heaptrace on|off

缺省情况下,不收集堆跟踪数据。要收集此数据,请指定 on

collector hw_profile 命令

collector hw_profile 命令指定用于收集硬件计数器溢出文件配置数据的选项。

语法

collector hwprofile on|off

缺省情况下,不收集硬件计数器溢出配置文件数据。要收集此数据,请指定 on

collector hwprofile list

输出可用计数器列表。

collector hwprofile counter name interval [name2 interval2]

指定硬件计数器名称和时间间隔。

其中:

name 是硬件计数器的名称。

interval 是收集时间间隔(毫秒)。

name2 是另一个硬件计数器的名称。

interval2 是收集时间间隔(毫秒)。

硬件计数器与系统特定相关,因此可供选择的计数器取决于使用的系统。许多系统都不支持硬件计数器溢出文件配置。在这些计算机中,这一功能被禁用。

collector limit 命令

collector limit 命令用于指定实验文件大小限制。

语法

collector limit value

其中:

value (MB) 是记录的文件配置数据量的限制值。达到该限制时,不再记录文件配置数据,但实验仍保持打开状态,且继续记录抽样点。记录的数据量的缺省限制为 2000 MB。

collector mpitrace 命令

collector mpitrace 命令指定用于收集 MPI 跟踪数据的选项。

语法

collector mpitrace on|off

缺省情况下,不收集 MPI 跟踪数据。要收集此数据,请指定 on

collector pause 命令

collector pause 命令用于停止收集数据,但让当前实验保持打开状态。收集器暂停时不记录样本点。在暂停前会生成一份抽样数据,且在恢复后立即生成另一份抽样数据。可以使用 collector resume 命令恢复数据收集(请参见collector resume 命令)。

语法

collector pause

collector profile 命令

collector profile 命令指定用于收集配置文件数据的选项。

语法

collector profile on|off

指定配置文件数据收集模式。

collector profile timer interval

指定配置文件计时器周期(定点或浮点),可在后面添加 m 表示毫秒或添加 u 表示微秒。

collector resume 命令

collector resume 命令用于在使用 collector pause 命令(请参见collector pause 命令)暂停数据收集后恢复数据收集。

语法

collector resume

collector sample 命令

collector sample 命令指定抽样模式和抽样时间间隔。

语法

collector sample periodic|manual

指定抽样模式。

collector sample period seconds

指定抽样时间间隔(以 seconds 为单位)。

collector sample record [name]

使用可选的 name 记录抽样数据。

其中:

seconds 是抽样时间间隔长度。

name 是抽样的名称。

collector show 命令

collector show 命令用于显示一种或多种选项设置。

语法

collector show

显示所有设置。

collector show all

显示所有设置。

collector show archive

显示归档设置。

collector show profile

显示调用栈文件配置设置。

collector show synctrace

显示线程同步等待跟踪设置。

collector show hwprofile

显示硬件计数器数据设置。

collector show heaptrace

显示堆跟踪数据设置。

collector show limit

显示实验大小限制。

collector show mpitrace

显示 MPI 跟踪数据设置。

collector show sample

显示抽样设置。

collector show store

显示存储设置。

collector show tha

显示线程分析程序数据设置。

collector status 命令

collector status 命令用于查询当前实验的状态。

语法

collector status

collector store 命令

collector store 命令用于指定存储实验的目录和文件名。

语法

collector store directory pathname

指定存储实验的目录。

collector store filename filename

指定实验文件名。

collector store group string

指定实验组名。

其中:

pathname 是要存储实验的目录的路径名。

filename 是实验文件名。

string 是实验组名。

collector synctrace 命令

collector synctrace 命令指定用于收集同步等待跟踪数据的选项。

语法

collector synctrace on|off

缺省情况下,不收集线程同步等待跟踪数据。要收集此数据,请指定 on。

collector synctrace threshold microseconds

以微秒为单位指定阈值。缺省值是 1000。

collector synctrace threshold calibrate

将自动计算阈值。

其中:

microseconds 是阈值,低于此阈值的同步等待事件都将被放弃。

collector tha 命令

语法

collector tha on|off

缺省情况下,不收集线程分析程序数据。要收集此数据,请指定 on

collector version 命令

collector version 命令用于报告将用于收集数据的 libcollector.so 的版本。

语法

collector version

cont 命令

cont 命令用于使进程继续执行。在本地模式和 Java 模式中,它的语法和功能相同。

语法

cont

继续执行。MT 进程中的所有线程都会被恢复。使用 Ctrl-C 停止执行程序。

cont ... -sig signal

使用信号 signal 继续执行。

cont ... id

id 指定要继续的线程或 LWP。

cont at line [ id]

在行 line 处继续执行。如果应用程序是多线程的,必须使用 id

cont ... -follow parent|child|both

如果 dbx follow_fork_mode 环境变量设置为 ask,且您选择了 stop,请使用此选项来选择要执行的进程。both 只能在 Oracle Solaris Studio IDE 中使用。

dalias 命令

dalias 命令用于定义 dbx 样式(csh 样式)的别名。仅在本地模式中有效。

语法

dalias

dbx 别名)列出所有当前定义的别名。

dalias name

列出别名 name 的定义(如果有)。

dalias name definition

定义 name 作为 definition 的别名。definition 可以包含空格。一个分号或新行即可结束定义。

其中:

name 是别名的名称。

definition 是别名的定义。

dbx 接受别名中常用的以下 csh 历史替代元语法:

!: <n>

!-<n>

!^

!$

!*

! 前通常需要加上反斜杠。例如:

dalias goto "stop at \!:1; cont; clear"

有关更多信息,请参见 csh(1) 手册页。

dbx 命令

dbx 命令用于启动 dbx

本地模式语法

dbx options program_name

调试 program_name

dbx options program_name core

使用核心转储文件 core 调试 program_name

dbx options program_name process_id

使用进程 ID process_id 调试 program_name

dbx options - process_id

调试进程 ID process_iddbx 使用 /proc 查找程序。

dbx options - core

使用核心转储文件 core 进行调试;另请参见debug 命令

dbx options -r program_name arguments

使用参数 arguments 运行 program_name;如果出现异常终止,则开始调试 program_name,否则退出。

其中:

program_name 是要调试的程序的名称。

process_id 是运行中的进程的进程 ID。

arguments 是要传递给程序的参数。

options选项中进行了介绍。

Java 模式语法

dbx options program_name{.class | .jar}

调试 program_name

dbx options program_name{.class | .jar} process_id

使用进程 ID process_id 调试 program_name

dbx options - process_id

调试进程 ID process_iddbx 使用 /proc 查找程序。

dbx options -r program_name{.class | .jar} arguments

使用参数 arguments 运行 program_name;如果出现异常终止,则开始调试 program_name,否则退出。

其中:

program_name 是要调试的程序的名称。

process_id 是运行中的进程的进程 ID。

arguments 是要传递给程序(而不是 JVM 软件)的参数。

options选项中进行了介绍。

选项

对于本地模式和 Java 模式,options 均如下所示:

-B

抑制所有消息;返回时带有正在被调试的程序的退出代码。 

-c commands

执行 commands 后,提示输入。

-C

预装入运行时检查库(请参见check 命令)。

-d

-s 一起使用,读取后删除 file

-e

回显输入命令。 

-f

强制装入核心转储文件,即使该文件不匹配。 

-h

输出有关 dbx 的用法帮助。

-I dir

dir 添加至 pathmap 设置(请参见pathmap 命令)。

-k

保存并恢复键盘转换状态。 

-q

禁止关于读取 stabs 的消息。 

-r

运行程序;如果程序正常退出,则退出。 

-R

输出 dbx 的自述文件。

-s file

使用 file 而非 /current_directory/.dbxrc$HOME/ .dbxrc 作为启动文件。

-S

禁止读取初始化文件 /installation_directory/lib/dbxrc

-V

输出 dbx 的版本信息。

-w n

执行 where 命令时跳过 n 帧。

-x exec32

运行 32 位 dbx 二进制文件,而不是运行 64 位操作系统的系统上缺省情况下运行的 64 位 dbx 二进制文件。

--

标记选项列表的末尾;如果程序名以短划线开头,则使用此选项。 

dbxenv 命令

dbxenv 命令用于列出或设置 dbx 环境变量。在本地模式和 Java 模式中,它的语法和功能相同。

语法

dbxenv

显示 dbx 环境变量的当前设置。

dbxenv environment_variable setting

environment_variable 设置为 setting

其中:

environment_variabledbx 环境变量。

setting 是相应变量的有效设置。

debug 命令

debug 命令用于列出或更改所调试的程序。在本地模式中,它装入指定的应用程序,然后开始调试该应用程序。在 Java 模式中,它装入指定的 Java 应用程序,接着检查是否存在类文件,然后开始调试该应用程序。

本地模式语法

debug

输出被调试程序的名称和参数。

debug program_name

在不使用进程或核心转储文件的情况下,开始调试 program_name

debug -c core program_name

使用核心转储文件 core 开始调试 program_name

debug -p process_id program_name

使用进程 ID process_id 开始调试 program_name

debug program_name core

使用核心转储文件 core 开始调试 programprogram_name 可为 -。dbx 将尝试从核心转储文件中提取可执行文件的名称。有关详细信息,请参见调试核心转储文件

debug program_name process_id

使用进程 ID process_id 开始调试 program_nameprogram_name 可为 -dbx 使用 /proc 查找程序。

debug -f ...

强制装入核心转储文件,即使该文件不匹配。

debug -r ...

使用 -r 选项时,dbx 保留所有 displaytracewhenstop 命令。如果不使用 -r 选项,则执行隐式 delete allundisplay O

debug -clone ...

-clone 选项可使另一个 dbx 进程开始执行,从而允许一次调试多个进程。只有在 Oracle Solaris Studio IDE 中运行时才有效。

debug -clone

启动另一个 dbx 进程,但不进行任何调试。只有在 Oracle Solaris Studio IDE 中运行时才有效。

debug [options] -- program_name

开始调试 program_name,即使 program_name 以短划线开头。

其中:

core 是核心转储文件的名称。

options选项中进行了介绍。

pid 是运行中的进程的进程 ID。

program_name 是程序的路径名。

使用 debug 命令装入程序时,禁用泄漏检查和访问检查。可以使用 check 命令启用这些检查(请参见check 命令)。

Java 模式语法

debug

输出被调试程序的名称和参数。

debug program_name [.class | .jar]

在不使用进程的情况下,开始调试 program_name

debug -p process_id program_name [.class | .jar]

使用进程 ID process_id 开始调试 program_name

debug program_name [.class | .jar] process_id

使用进程 ID process_id 开始调试 program_nameprogram_name 可为 -dbx 使用 /proc 查找程序。

debug -r

使用 -r 选项时,dbx 保留所有 watch 命令、display 命令、trace 命令、when 命令以及 stop 命令。如果不使用 -r 选项,则执行隐式 delete all 命令和 undisplay 0 命令。

debug -clone ...

-clone 选项可使另一个 dbx 进程开始执行,从而允许一次调试多个进程。只有在 Oracle Solaris Studio IDE 中运行时才有效。

debug -clone

启动另一个 dbx 进程,但不进行任何调试。只有在 Oracle Solaris Studio IDE 中运行时才有效。

debug [options] -- program_name{.class | .jar}

开始调试 program_name,即使 program_name 以短划线开头。

其中:

file_name 是文件名。

options选项中进行了介绍。

process_id 是运行中的进程的进程 ID。

program_name 是程序的路径名。

选项

-c commands

执行 commands 后,提示输入。

-d

-s 一起使用,读取后删除 file。

-e

回显输入命令。

-I directory_name

directory_name 添加至 pathmap 设置(请参见pathmap 命令)。

-k

保存并恢复键盘转换状态。

-q

禁止关于读取 stabs 的消息。

-r

运行程序;如果程序正常退出,则退出。

-R

输出 dbx 的自述文件。

-s file

使用 file 而非 current_directory/.dbxrc$HOME/.dbxrc 作为启动文件

-S

禁止读取初始化文件 /installation_directory/lib/dbxrc

-V

输出 dbx 的版本信息。

-w n

执行 where 命令时跳过 n 帧。

--

标记选项列表的末尾;如果程序名以短划线开头,则使用此选项。

delete 命令

delete 命令用于删除断点和其他事件。在本地模式和 Java 模式中,它的语法和功能相同。

语法

delete [-h] handler_id ...

删除给定 handler_idtrace 命令、when 命令或 stop 命令。要删除隐藏的处理程序,必须指定 -h 选项。

delete [-h] O | all | -all

删除所有 trace 命令、when 命令和 stop 命令,但不包括永久性和隐藏的处理程序。指定 -h 也可以删除隐藏的处理程序。

delete -temp

删除所有临时处理程序。

delete $firedhandlers

删除所有导致最近停止的处理程序。

其中:

handler_id 是处理程序的标识符。

detach 命令

detach 命令用于取消 dbx 对目标进程的控制。

本地模式语法

detach

使 dbx 与目标分离,并取消所有待处理信号。

detach -sig signal

在先前传送指定的 signal 时分离。

detach -stop

使 dbx 与目标分离,并让进程处于停止状态。使用此选项可以临时应用其他可能因专用访问而被阻止的基于 /proc 的调试工具。有关示例,请参见从进程中分离 dbx

其中:

signal 是信号名。

Java 模式语法

detach

使 dbx 与目标分离,并取消所有待处理信号。

dis 命令

dis 命令用于反汇编机器指令。仅在本地模式中有效。

语法

dis [ -a ] address [/ count]

反汇编 count 个始于地址 address 的指令(缺省值为 10)。

dis address1, address2

反汇编 address1address2 的指令。

dis

反汇编从值 + 开始的 10 个指令(请参见examine 命令)。

其中:

address 是开始反汇编的地址。address 的缺省值为先前汇编的最后一个地址的下一个地址。此值由 examine 命令共享(请参见examine 命令)。

address1 是开始反汇编的地址。

address2 是停止反汇编的地址。

count 是反汇编的指令数。count 的缺省值是 10。

选项

-a

如果与函数地址一起使用,则反汇编整个函数。如果使用时不带参数,则反汇编当前访问函数的剩余部分(如果有)。

display 命令

在本地模式中,display 命令用于在每个停止点处对表达式重新求值并进行输出。在 Java 模式中,display 命令用于在每个停止点处对表达式、局部变量或参数求值并进行输出。对象引用将扩展为一层,而数组将逐条输出。

键入命令时,会以当前作用域分析表达式,并在每个停止点处对表达式重新求值。因为在到达入口点时会分析表达式,所以可以立即检验表达式是否正确。

如果在 Sun Studio 12 发行版、Sun Studio 12 Update 1 发行版或 Oracle Solaris Studio 12.2 发行版的 IDE 中运行 dbxdisplay expression 命令将有效运行,其行为如同 watch $(which expression) 命令一样。

本地模式语法

display

输出所显示的表达式列表。

display expression, ...

显示每个停止点处表达式 expression, ... 的值。由于在到达入口点时会分析 expression,因此可以立即检验表达式是否正确。

display [-r|+r|-d|+d|-S|+S|-p|+p|-L|-fformat |-Fformat|--] expression, ...

有关这些标志的含义,请参见print 命令

其中:

expression 是有效的表达式。

format 是输出表达式时要使用的输出格式。有关有效格式的信息,请参见print 命令

Java 模式语法

display

输出所显示的变量和参数列表。

display expression| identifier, ...

显示每个停止点处 identifier、... 的变量和参数的值。

display [-r|+r|-d|+d|-p|+p|-fformat|-F format|-Fformat|--] expression |identifier, ...

有关这些标志的含义,请参见print 命令

其中:

class_name 是 Java 类的名称,可以使用包路径(使用句点 (.) 作为限定符,例如 test1.extra.T1.Inner),也可以使用完整路径名(前面加磅符号 (#), 并使用斜线 (/) 和美元符号 ($) 作为限定符,例如 #test1/extra/T1$Inner)。如果使用 $ 限定符,请使用引号将 class_name 引起来。

expression 是有效的 Java 表达式。

field_name 是类中字段的名称。

format 是输出表达式时要使用的输出格式。有关有效格式的信息,请参见print 命令

identifier 是一个局部变量或参数,包括 this、当前类实例变量 (object_name.field_name) 或类(静态)变量 (class_name.field_name)。

object_name 是 Java 对象的名称。

down 命令

down 命令用于下移调用栈(远离 main)。在本地模式和 Java 模式中,它的语法和功能相同。

语法

down

调用栈下移一级。

down number

将调用栈下移 number 级。

down -h [number]

下移调用栈,但不跳过隐藏的帧。

其中:

number 是调用栈级数。

dump 命令

dump 命令用于输出某个过程的所有局部变量。在本地模式和 Java 模式中,它的语法和功能相同。

语法

dump

输出当前过程的所有局部变量。

dump procedure

输出 procedure 的所有局部变量。

其中:

procedure 是过程名。

edit 命令

edit 命令用于对源文件调用 $EDITOR。仅在本地模式中有效。

如果 dbx 不是在 Oracle Solaris Studio 中运行,edit 命令将使用 $EDITOR。否则,它将向 IDE 发送消息,显示相应文件。

语法

edit

编辑当前文件。

edit file_name

编辑指定文件 file_name

edit procedure

编辑包含函数或过程 procedure 的文件。

其中:

file_name 是文件名。

procedure 是函数名或过程名。

examine 命令

examine 命令用于显示内存内容。仅在本地模式中有效。

语法

examine [address] [ / [count] [format]]

format 格式显示始于 addresscount 项内存内容。

examine address1, address2 [ / [format]]

format 格式显示 address1address2(首末地址包含在内)的内存内容。

examine address= [ format]

以指定格式显示地址(而不是地址的内容)。

address 可以是 +,表示先前显示的最后一个地址的下一个地址(如同忽略了先前显示的最后一个地址)。

x 是 examine 的预定义别名。

其中:

address 是开始显示内存内容的地址。address 的缺省值是最后显示其内容的地址的下一个地址。此值由 dis 命令共享(请参见dis 命令)。

address1 是开始显示内存内容的地址。

address2 是停止显示内存内容的地址。

count 是从中显示内存内容的地址数。count 的缺省值是 1。

format 是内存地址内容的显示格式。第一个 examine 命令的缺省格式是 X(十六进制),后续 examine 命令的缺省格式是前一个 examine 命令中指定的格式。以下所示为 format 的有效值:

o、O

八进制(2 或 4 字节)

x、X

十六进制(2 或 4 字节)

b

八进制(1 字节)

c

字符

w

宽字符

s

字符串

W

宽字符串

f

十六进制和浮点(4 字节,6 位精度)

F

十六进制和浮点(8 字节,14 位精度)

g

F 相同

E

十六进制和浮点(16 字节,14 位精度)

ld、lD

十进制(4 字节,与 D 相同)

lo、lO

八进制(94 字节,与 O 相同)

lx、lX

十六进制(4 字节,与 X 相同)

Ld、LD

十进制(8 字节)

Lo、LO

八进制(8 字节)

Lx、LX

十六进制(8 字节)

exception 命令

exception 命令用于输出当前 C++ 异常的值。仅在本地模式中有效。

语法

exception [-d | +d]

输出当前 C++ 异常的值(如果有)。

有关 -d 标志的含义,请参见print 命令

exists 命令

exists 命令用于检查符号名是否存在。仅在本地模式中有效。

语法

exists name

如果在当前程序中找到 name,则返回 0;如果没找到 name,则返回 1。

其中:

name 是符号名。

file 命令

file 命令用于列出或更改当前文件。在本地模式和 Java 模式中,它的语法和功能相同。

语法

file

输出当前文件的名称。

file file_name

更改当前文件。

其中:

file_name 是文件名。

files 命令

在本地模式中,files 命令用于列出与正则表达式匹配的文件名。在 Java 模式中,files 命令用于列出 dbx 已知的所有 Java 源文件。如果 Java 源文件与 .class 或 .jar 文件不在同一目录中,dbx 可能找不到它们,除非您已经设置了 $JAVASRCPATH 环境变量(请参见指定 Java 源文件的位置)。

本地模式语法

files

列出提供当前程序调试信息的所有文件(使用 -g 编译的文件)的名称。

files regular_expression

列出所有使用 -g 编译且与指定正则表达式匹配的文件的名称。

其中:

regular_expression 是正则表达式。

例如:

(dbx) files ^r
myprog:
retregs.cc
reg_sorts.cc
reg_errmsgs.cc
rhosts.cc

Java 模式语法

files

列出 dbx 已知的所有 Java 源文件的名称。

fix 命令

fix 命令用于重新编译修改过的源文件,并动态将修改过的函数链接至应用程序中。仅在本地模式中有效。该功能在 Linux 平台上无效。

语法

fix

修复当前文件。

fix file_name file_name

修复列表中的文件。

fix -f

强制修复文件,即使源文件未经过修改。

fix -a

修复所有已修改的文件。

fix -g

清除 -O 标志并添加 -g 标志。

fix -c

输出编译行(可能包含某些在内部添加以供 dbx 使用的选项)。

fix -n

不执行编译/链接命令(与 -v 一起使用)。

fix -v

冗余模式(覆盖 dbx 环境变量 fix_verbose 的设置)。

fix +v

非冗余模式(覆盖 dbx 环境变量 fix_verbose 的设置)。

fixed 命令

fixed 命令用于列出所有已修复文件的名称。仅在本地模式中有效。

语法

fixed

fortran_modules 命令

fortran_modules 命令用于列出当前程序中的 Fortran 模块或者其中一个模块中的函数或变量。

语法

fortran_modules

用于列出当前程序中的 Fortran 模块。

fortran_modules -f module_name

用于列出指定模块中的所有函数。

fortran_modules -v module_name

用于列出指定模块中的所有变量。

frame 命令

frame 命令用于列出或更改当前栈帧号。在本地模式和 Java 模式中,它的语法和功能相同。

语法

frame

显示当前帧的帧号。

frame [-h] number

将当前帧设置为帧 number

frame [-h] +[number]

在栈中上移 number 帧;缺省值为 1。

frame [-h] -[number]

在栈中下移 number 帧;缺省值为 1。

-h

即使帧隐藏,也转至帧。

其中:

number 是调用栈中帧的编号。

func 命令

在本地模式中,func 命令用于列出或更改当前函数。在 Java 模式中,func 命令用于列出或更改当前方法。

本地模式语法

func

输出当前函数的名称。

func procedure

将当前函数更改为函数或过程 procedure

其中:

procedure 是函数名或过程名。

Java 模式语法

func

输出当前方法的名称。

func [class_name.] method_name [(parameters)]

将当前函数更改为方法 method_name

其中:

class_name 是 Java 类的名称,可以使用包路径(使用句点 (.) 作为限定符,例如 test1.extra.T1.Inner),也可以使用完整路径名(前面加磅符号 (#), 并使用斜线 (/) 和美元符号 ($) 作为限定符,例如 #test1/extra/T1$Inner)。如果使用 $ 限定符,请使用引号将 class_name 引起来。

method_name 是 Java 方法的名称。

parameters 是方法的参数。

funcs 命令

funcs 命令用于列出与某个正则表达式匹配的所有函数名。仅在本地模式中有效。

语法

funcs

列出当前程序中的所有函数。

funcs [-f file_name] [-g] [regular_expression]

如果指定了 -f file_name,则列出文件中的所有函数。如果指定了 -g,则列出具有调试信息的所有函数。如果 file_name.o 结尾,则会列出所有函数,包括那些编译器自动创建的函数。否则,只会列出出现在源代码中的函数。

如果指定了 regular_expression,则列出与正则表达式匹配的所有函数。

其中:

file_name 是要列出其所有函数的文件的名称。

regular_expression 是要列出的所有匹配函数所匹配的正则表达式。

例如:


(dbx) funcs [vs]print
”libc.so.1”isprint
”libc.so.1”wsprintf
”libc.so.1”sprintf
”libc.so.1”vprintf
”libc.so.1”vsprintf

gdb 命令

gdb 命令用于支持 gdb 命令集。仅在本地模式中有效。

语法

gdb on | off

使用 gbd on 可进入 gdb 命令模式,在该模式下,dbx 理解并接受 gdb 命令。要退出 gdb 命令模式并返回到 dbx 命令模式,请键入 gdb off。在 gdb 命令模式下不接受 dbx 命令;在 dbx 模式下不接受 gdb 命令。所有调试设置(例如,断点)在不同的命令模式中均保留。

此发行版本不支持下列 gdb 命令:

handler 命令

handler 命令用于修改事件处理程序(启用、禁用等)。在本地模式和 Java 模式中,它的语法和功能相同。

对于每个需要在调试会话中管理的事件,都会创建一个处理程序。命令 tracestopwhen 均可创建处理程序。其中每个命令均会返回一个称为处理程序 ID (handler_id) 的数字。handlerstatusdelete 命令以一般方式处理或提供有关处理程序的信息。

语法

handler -enable handler_id ...

启用指定处理程序,要启用所有处理程序,可将 handler_id 指定为 all。

handler -disable handler_id ...

禁用指定处理程序,要禁用所有处理程序,可将 handler_id 指定为 all。要禁用导致最近停止的处理程序,请使用 $firedhandlers 而不是 handler_id

handler -count handler_id

输出指定处理程序的行程计数器的值。

handler -count handler_id new_limit

设置指定事件的新计数限制。

handler -reset handler_id

使指定处理程序的行程计数器复位。

其中:

handler_id 是处理程序的标识符。

hide 命令

hide 命令用于隐藏与某个正则表达式匹配的栈帧。仅在本地模式中有效。

语法

hide

列出当前正在使用的栈帧过滤器。

hide regular_expression

隐藏与 regular_expression 匹配的栈帧。正则表达式与函数名或装入对象的名称匹配,并且是与样式正则表达式匹配的 sh 或 ksh 文件。

其中:

regular_expression 是正则表达式。

ignore 命令

ignore 命令用于告知 dbx 进程不要捕获指定信号。仅在本地模式中有效。

忽略信号会导致进程收到这种信号时 dbx 不会停止。

语法

ignore

输出已忽略信号的列表。

ignore number ...

忽略编号为 number 的信号。

ignore signal ...

忽略名为 signal 的信号。但无法捕获或忽略 SIGKILL

其中:

number 是信号的编号。

signal 是信号名。

import 命令

import 命令用于从 dbx 命令库中导入命令。在本地模式和 Java 模式中,它的语法和功能相同。

语法

import path_name

dbx 命令库 path_name 中导入命令。

其中:

path_namedbx 命令库的路径名。

intercept 命令

intercept 命令用于抛出指定类型的 (C++) 异常(仅限于 C++)。仅在本地模式中有效。

当所抛出异常的类型与拦截列表中的某一类型匹配时,dbx 将停止,除非该异常的类型也与排除列表中的某一类型匹配。没有匹配捕获的抛出异常称为“未处理”抛出。与从中抛出异常的函数的异常规范不匹配的抛出异常称为“意外”抛出。

缺省情况下,会拦截未处理的抛出和意外抛出。

语法

intercept -x excluded_typename [, excluded_typename ...]

excluded_typename 的抛出添加到排除列表。

intercept -a[ll] -x excluded_typename [, excluded_typename...]

excluded_typename 之外的所有类型添加到拦截列表。

intercept -s[et] [intercepted_typename [, intercepted_typename ...]] [-x excluded_typename [, excluded_typename]]

清除拦截列表和排除列表,并设置列表以仅拦截或排除指定类型的抛出。

intercept

列出被拦截的类型。

其中:

included_typenameexcluded_typename 是异常类型规范,如 List <int>unsigned short

java 命令

dbx 处于 JNI 模式时,使用 java 命令表示将要执行指定命令的 Java 版本。这将使指定命令使用 Java 表达式计算器,并在关联时显示 Java 线程和栈帧。

语法

java command

其中:

command 是要执行的命令的名称和参数。

jclasses 命令

jclasses 命令用于在您提供了命令时输出 dbx 已知的所有 Java 类名。仅在 Java 模式中有效。

不输出程序中尚未加载的类。

语法

jclasses

输出 dbx 已知的所有 Java 类名。

jclasses -a

输出系统类和其他已知的 Java 类。

joff 命令

joff 命令用于将 dbx 从 Java 模式或 JNI 模式切换到本地模式。

语法

joff

jon 命令

jon 命令用于将 dbx 从本地模式切换到 Java 模式。

语法

jon

jpkgs 命令

jpkgs 命令用于在您提供了命令时输出 dbx 已知的所有 Java 包名。仅在 Java 模式中有效。

不输出程序中尚未加载的包。

语法

jpkgs

kill 命令

kill 命令用于向进程发送信号。仅在本地模式中有效。

语法

kill -l

列出所有已知信号编号、名称和说明。

kill

中止受控进程。

kill job ...

向列出的作业发送 SIGTERM 信号。

kill -signal job ...

向列出的作业发送指定信号。

其中:

job 可以是进程 ID,也可以按下列任一方法进行指定:

%+

中止当前作业。

%-

中止上一作业。

%number

中止编号为 number 的作业。

%string

中止以 string 开头的作业。

%?string

中止包含 string 的作业。

signal 是信号名。

language 命令

language 命令用于列出或更改当前源语言。仅在本地模式中有效。

语法

language

输出通过 dbx 环境变量 language_mode 设置的当前语言模式(请参见设置 dbx 环境变量)。如果语言模式设置为 autodetectmain,该命令还将输出用于分析和求表达式的当前语言名称。

其中:

language 可为 c、c++、fortran 或 fortran90。


注 –

c 是 ansic 的别名。


line 命令

line 命令用于列出或更改当前行号。在本地模式和 Java 模式中,它的语法和功能相同。

语法

line

显示当前行号。

line number

将当前行号设置为 number

line "file_name"

将当前行号设置为 file_name 中的第 1 行。

line "file_name": number

将当前行号设置为 file_name 中的第 number 行。

其中:

file_name 是要在其中更改行号的文件的名称。文件名两旁的 " " 是可选的。

number 是文件中的行号。

示例

line 100
line "/root/test/test.cc":100

list 命令

list 命令用于显示源文件的行。在本地模式和 Java 模式中,它的语法和功能相同。

列出的缺省行数 N 由 dbx 环境变量 output_list_size 控制。

语法

list

列出 N 行。

list number

列出行号为 number 的行。

list +

列出后 N 行。

list +n

列出后 n 行。

list -

列出前 N 行。

list

列出前 n 行。

list n1, n2

列出第 n1 行到第 n2

list n1, +

列出第 n1 行到第 n1 + N 行。

list n1, +n2

列出第 n1 行到第 n1 + n2 行。

list n1, -

列出第 n1-N 行到第 n1 行。

list n1, -n2

列出第 n1-n2 行到第 n1 行。

list function

列出 function 源的开头。list function 将更改当前范围。有关更多信息,请参见程序作用域

list file_name

列出文件 file_name 的开头。

list file_name: n

列出文件 filename 中从第 n 行开始的内容。

其中:

file_name 是源代码文件的名称。

function 是要显示的函数名。

number 是源文件中的行号。

n 是要显示的行数。

n1 是要显示的第一行的编号。

n2 是要显示的最后一行的编号。适当时,行号可能为 "$",表示文件的最后一行。逗号是可选的。

选项

-i-instr

混合源代码行和汇编代码。

-w-wn

列出行或函数前后 N(或 n)行(范围)。此选项不能与 "+" 或 "-" 语法一起使用,指定了两个行号时,也不允许使用此选项。

-a

如果与函数一起使用,则列出整个函数。如果使用时不带参数,则列出当前访问函数的剩余部分(如果有)。

示例

list                      // list N lines starting at current line
list +5                      // list next 5 lines starting at current line
list -                    // list previous N lines
list -20                  // list previous 20 lines
list 1000                 // list line 1000
list 1000,$               // list from line 1000 to last line
list 2737 +24             // list line 2737 and next 24 lines
list 1000 -20             // list line 980 to 1000
list test.cc:33           // list source line 33 in file test.cc
list -w                   // list N lines around current line
list -w8 ”test.cc”func1   // list 8 lines around function func1
list -i 500 +10                // list source and assembly code for line
                500 to line 510

listi 命令

listi 命令用于显示源指令和反汇编指令。仅在本地模式中有效。

有关详细信息,请参见list 命令

loadobject 命令

loadobject 命令用于列出和管理装入对象中的符号信息。仅在本地模式中有效。

语法

loadobject -list [regexp] [-a]

显示当前装入的装入对象(请参见loadobject -list 命令

loadobject -load loadobject

为指定的装入对象装入符号(请参见loadobject -load 命令)。

loadobject -unload [regexp]

卸载指定的装入对象(请参见loadobject -unload 命令)。

loadobject -hide [regexp]

dbx 的搜索算法中删除装入对象(请参见loadobject -hide 命令)。

loadobject -use [regexp]

将装入对象添加到 dbx 的搜索算法中(请参见loadobject -use 命令)。

loadobject -dumpelf [regexp]

显示装入对象的各种 ELF 详细信息(请参见loadobject -dumpelf 命令)。

loadobject -exclude ex_regexp

不自动装入与 ex_regexp 匹配的装入对象(请参见loadobject -exclude 命令)。

loadobject exclude -clear

清除模式排除列表(请参见loadobject -exclude 命令)。

其中:

regexp 是正则表达式。如果未指定,则该命令应用于所有装入对象。

ex_regexp 不是可选的,必须指定。

该命令的缺省别名是 lo

loadobject -dumpelf 命令

loadobject -dumpelf 命令用于显示装入对象的各种 ELF 详细信息。仅在本地模式中有效。

语法

loadobject -dumpelf [regexp]

其中:

regexp 是正则表达式。如果未指定,则该命令应用于所有装入对象。

该命令可转储出磁盘上装入对象文件的 ELF 结构的相关信息。该输出的详细信息随时变化。如果要分析此输出,请使用 Solaris OS 命令 dumpelfdump

loadobject -exclude 命令

loadobject -exclude 命令用于告知 dbx 不要自动装入与指定正则表达式匹配的装入对象。

语法

loadobject -exclude ex_regexp [-clear]

其中:

ex_regexp 是正则表达式。

此命令可防止 dbx 自动为与指定正则表达式匹配的装入对象装入符号。与其他 loadobject 子命令中的 regexp 不同,如果未指定 ex_regexp,并不表示缺省情况下应用于所有装入对象。如果未指定 ex_regexp,该命令将列出先前的 loadobject -exclude 命令指定的排除模式。

如果指定 -clear,则删除排除模式列表。

目前这种功能不能用于防止装入主程序或运行时链接程序。另外,如果使用它防止装入 C++ 运行时库,可能会导致某些 C++ 功能无法正常使用。

此选项不能与运行时检查 (RTC) 一起使用。

loadobject -hide 命令

loadobject -hide 命令用于从 dbx 的搜索算法中删除装入对象。

语法

loadobject -hide [regexp]

其中:

regexp 是正则表达式。如果未指定,则该命令应用于所有装入对象。

该命令从程序范围中删除装入对象,并隐藏其函数和符号,不让 dbx 得知。该命令也重置“预装入”位。

loadobject -list 命令

loadobject -list 命令用于显示当前装入的装入对象。仅在本地模式中有效。

语法

loadobject -list [regexp] [-a]

其中:

regexp 是正则表达式。如果未指定,则该命令应用于所有装入对象。

显示每个装入对象的完整路径名,并在旁边显示表示状态的字母。仅当指定了 -a 选项时,才会列出隐藏的装入对象。

h

此字母表示“隐藏”(whatisstop in 之类的符号查询不会找到符号)。

u

如果有活动进程,u 表示“已取消映射”。

p

此字母表示预装入的装入对象,即程序中 loadobject -load 命令或 dlopen 事件的结果。

例如:

(dbx) lo -list libm
/usr/lib/64/libm.so.1
/usr/lib/64/libmp.so.2
(dbx) lo -list ld.so
h  /usr/lib/sparcv9/ld.so.1 (rtld)

上述示例表明,缺省情况下,运行时链接程序的符号处于隐藏状态。要在 dbx 命令中使用这些符号,请参见loadobject -use 命令

loadobject -load 命令

loadobject -load 命令用于为指定装入对象装入符号。仅在本地模式中有效。

语法

loadobject -load loadobject

其中:

loadobject 可以是完整路径名,也可以是 /usr/lib/usr/lib/sparcv9/usr/lib/amd64 中的库。如果在调试某个程序,将仅搜索适当的 ABI 库目录。

loadobject -unload 命令

loadobject -unload 命令用于卸载指定的装入对象。仅在本地模式中有效。

语法

loadobject -unload [regexp]

其中:

regexp 是正则表达式。如果未指定,则该命令应用于所有装入对象。

该命令卸载与命令行中提供的 regexp 匹配的所有装入对象的符号。不能卸载使用 debug 命令装入的主程序。另外,dbx 可能会拒绝卸载当前正在使用或对 dbx 的正确运行至关重要的其他装入对象。

loadobject -use 命令

loadobject -use 命令用于向 dbx 的搜索算法中添加装入对象。仅在本地模式中有效。

语法

loadobject -use [regexp]

其中:

regexp 是正则表达式。如果未指定,则该命令应用于所有装入对象。

lwp 命令

lwp 命令用于列出或更改当前 LWP(lightweight process,轻量级进程)。仅在本地模式中有效。


注 –

只能在 Solaris 平台上执行 lwp 命令。


语法

lwp

显示当前 LWP。

lwp lwp_id

切换到 LWP lwp_id

lwp -info

显示当前 lwp 的名称、位置和屏蔽信号。

lwp [lwp_id] -setfp address_expression

dbx 告知 fp 寄存器具有 address_expression 值。调试核心转储文件时,不会更改正在调试的程序的状态,此时 assign $fp=... 不可用。恢复执行时,使用 -setfp 选项设置的帧指针将被重置为其初始值。

lwp [lwp_id] -resetfp

根据当前进程或核心转储文件中的寄存器值设置帧指针逻辑值,从而撤消前一个 lwp -setfp 命令的作用。

其中:

lwp_id 是轻量级进程的标识符。

如果该命令与 lwp_id 和选项一起使用,则会对 lwp_id 指定的 LWP 执行相应的操作,但是不会更改当前的 LWP。

当 LWP 的帧指针 (fp) 已损坏时,-setfp-resetfp 选项很有用。这种情况下,dbx 无法正常重建调用栈以及对局部变量求值。这些选项在调试核心转储文件时发挥作用,此时 assign $fp=... 不可用。

要更改正在调试的应用程序可访问的 fp 寄存器,请使用 assign $fp=address_expression 命令。

lwps 命令

lwps 命令用于列出进程中的所有 LWP(lightweight process,轻量级进程)。仅在本地模式中有效。


注 –

只能在 Solaris 平台上执行 lwp 命令。


语法

lwps

列出当前进程中的所有 LWP。

mmapfile 命令

mmapfile 命令用于查看核心转储中丢失的内存映射文件内容。仅在本地模式中有效。

Solaris 核心转储文件不包含只读内存段。可执行只读段(即文本)自动进行处理,dbx 通过查看可执行文件和相关共享对象对照这些段解决内存访问问题。

语法

mmapfile mmapped_file address offset length

查看从核心转储中丢失的内存映射文件的内容。

其中:

mmapped_file 是核心转储期间映射内存的文件的文件名。

address 是进程地址空间的起始地址。

length 是要查看的地址空间的字节长度。

offset 是距离 mmapped_file 中的起始地址的字节偏移。

示例

只读数据段通常在应用程序内存映射数据库时出现。例如:

caddr_t vaddr = NULL;
off_t offset = 0;
size_t = 10 * 1024;
int fd;
fd = open("../DATABASE", ...)
vaddr = mmap(vaddr, size, PROT_READ, MAP_SHARED, fd, offset);
index = (DBIndex *) vaddr;

要能够通过调试器像访问内存一样访问数据库,应该键入:

mmapfile ../DATABASE $[vaddr] $[offset] $[size]

然后可以键入以下命令按结构化方式查看数据库内容:

print *index

module 命令

module 命令用于读取一个或多个模块的调试信息。仅在本地模式中有效。

语法

module [-v]

输出当前模块的名称。

module [-f] [-v] [-q] name

读入称为 name 的模块的调试信息。

module [-f] [-v] [-q] -a

读入所有模块的调试信息。

其中:

name 是要读取其调试信息的模块的名称。

-a 表示指定所有模块。

-f 表示强制读取调试信息,即使该文件比可执行文件更新(使用时需谨慎!)。

-v 表示指定详细模式,用于输出语言、文件名等。

-q 表示指定静默模式。

modules 命令

modules 命令用于列出模块名。仅在本地模式中有效。

语法

modules [-v]

列出所有模块。

modules [-v] -debug

列出包含调试信息的所有模块。

modules [-v] -read

列出包含已读入的调试信息的模块的名称。

其中:

-v 表示指定详细模式,用于输出语言、文件名等。

native 命令

dbx 处于 Java 模式时,使用 native 命令表示将要执行指定命令的本机版本。如果在命令前加上 "native",dbx 将以本地模式执行命令。这意味着按照 C 表达式或 C++ 表达式解释和显示表达式,且某些其他命令在该模式下生成的输出与在 Java 模式下的输出不同。

如果在调试 Java 代码的过程中要检查本机环境,此命令很有用。

语法

native command

其中:

command 是要执行的命令的名称和参数。

next 命令

next 命令用于单步执行一个源代码行(步过调用)。

dbx 环境变量 step_events(请参见设置 dbx 环境变量)控制在单步执行期间是否启用断点。

本地模式语法

next

单步执行一行(步过调用)。对于多线程程序,步过函数调用时,为了避免死锁,会在该函数调用期间隐式恢复所有 LWP(lightweight process,轻量级进程)。非活动线程无法单步执行。

next n

单步执行 n 行(步过调用)。

next ... -sig signal

单步执行时传递指定信号。

next ... thread_id

单步执行指定线程。

next ... lwp_id

单步执行指定 LWP。步过函数时,不隐式恢复所有 LWP。

其中:

n 是要单步执行的行数。

signal 是信号名。

thread_id 是线程 ID。

lwp_id 是 LWP ID。

如果提供显式 thread_idlwp_id,则通用 next 命令的死锁避免措施不起作用。

有关机器级步过调用,另请参见nexti 命令


注 –

有关轻量级进程 (lightweight process, LWP) 的信息,请参见 Solaris《多线程编程指南》


Java 模式语法

next

单步执行一行(步过调用)。对于多线程程序,步过函数调用时,为了避免死锁,会在该函数调用期间隐式恢复所有 LWP(lightweight process,轻量级进程)。非活动线程无法单步执行。

next n

单步执行 n 行(步过调用)。

next ... thread_id

单步执行指定线程。

next ... lwp_id

单步执行指定 LWP。步过函数时,不隐式恢复所有 LWP。

其中:

n 是要单步执行的行数。

thread_id 是线程标识符。

lwp_id 是 LWP 标识符。

如果提供显式 thread_idlwp_id,则通用 next 命令的死锁避免措施不起作用。


注 –

有关轻量级进程 (lightweight process, LWP) 的信息,请参见 Solaris《多线程编程指南》。


nexti 命令

nexti 命令单步执行一个机器指令(步过调用)。仅在本地模式中有效。

语法

nexti

单步执行一个机器指令(步过调用)。

nexti n

单步执行 n 个机器指令(步过调用)。

nexti -sig signal

单步执行时传递指定信号。

nexti ... lwp_id

单步执行指定 LWP。

nexti ... thread_id

单步执行指定线程在其中处于活动状态的 LWP。步过函数时,不隐式恢复所有 LWP。

其中:

n 是要单步执行的指令个数。

signal 是信号名。

thread_id 是线程 ID。

lwp_id 是 LWP ID。

omp_loop 命令

omp_loop 命令用于输出当前循环的描述,其中包括调度(静态、动态、指导、自动或运行时)、有序性、界限、步幅或跨距以及迭代数。只能从当前正执行循环的线程发出该命令。

语法

omp_loop

omp_pr 命令

omp_pr 命令用于输出当前或指定并行区域的描述,其中包括父区域、并行区域 ID、组大小(线程数)及程序位置(程序计数器地址)。

语法

omp_pr

输出当前并行区域的描述。

omp_pr parallel_region_id

输出指定并行区域的描述。此命令不会使 dbx 将当前并行区域切换为指定区域。

omp_pr -ancestors

输出所有并行区域的描述以及从当前并行区域到当前并行区域树根目录的路径。

omp_pr parallel_region_id - ancestors

输出所有并行区域的描述以及从指定并行区域到其根目录的路径。

omp_pr -tree

输出整个并行区域树的描述。

omp_pr -v

输出当前并行区域的描述以及组成员信息。

omp_serialize 命令

omp_serialize 命令用于将当前线程或当前组中所有线程遇到的下一个并行区域的执行进行序列化。序列化仅适用于并行区域的此次行程,以后不会继续有效。

使用此命令时,请确保处于程序中的正确位置。合理的位置是指执行并行指令之前的点。

语法

omp_serialize

将当前线程遇到的下一个并行区域的执行序列化。

omp_serialize -team

将当前组中所有线程遇到的下一个并行区域的执行序列化。

omp_team 命令

omp_team 命令用于输出当前组中的所有线程。

语法

omp_team

输出当前组中的所有线程。

omp_team parallel_region_id

输出指定并行区域的组中的所有线程。

omp_tr 命令

omp_tr 命令用于输出当前任务区域的描述,其中包括任务区域 ID、类型(隐式或显式)、状态(已产生、正在执行或正在等待)、正在执行的线程、程序位置(程序计数器地址)、未完成的子项以及父项。

语法

omp_tr

输出当前任务区域的描述。

omp_tr task_region_id

输出指定任务区域的描述。此命令不会使 dbx 将当前任务区域切换为指定任务区域。

omp_tr -ancestors

输出所有任务区域的描述以及从当前任务区域到当前任务区域树根目录的路径。

omp_tr task_region_id -ancestors

输出所有任务区域的描述以及从指定任务区域到其根目录的路径。

omp_tr -tree

输出整个任务区域树的描述。

pathmap 命令

pathmap 命令用于将一个路径名映射到另一个路径名,以查找源文件等。该映射适用于源路径、目标文件路径和当前工作目录(如果指定 -c)。在本地模式和 Java 模式中,pathmap 命令的语法和功能相同。

pathmap 命令对于处理在不同主机上具有不同路径的自动挂载和显式 NFS 挂载文件系统很有用。尝试解决由于在自动挂载的文件系统上 CWD 不准确而由自动安装程序引起的问题时,可指定 -c。如果原始树或构建树移动了,pathmap 命令也很有用。

缺省情况下,存在 pathmap /tmp_mnt /

dbx 环境变量 core_lo_pathmap 设置为 on 时,可使用 pathmap 命令查找核心转储文件的装入对象。除此之外,pathmap 命令对查找装入对象(共享库)无效。请参见调试不匹配的核心转储文件

语法

pathmap [ -c ] [ -index ] from to

建立从 fromto 的新映射。

pathmap [ -c ] [ -index ] to

将所有路径都映射到 to

pathmap

列出所有现有路径映射(按索引)。

pathmap -s

相同,但 dbx 可以读取输出。

pathmap -d from1 from2 ...

删除指定映射(按路径)。

pathmap -d index1 index2 ...

删除指定映射(按索引)。

其中:

fromto 是文件路径前缀。from 是指编译到可执行文件或目标文件中的文件路径,to 是指调试时的文件路径。

from1 是要删除的第一个映射的文件路径。

from2 是要删除的最后一个映射的文件路径。

index 指定映射插入列表中时采用的索引。如果未指定索引,映射将添加到列表末尾。

index1 是要删除的第一个映射的索引。

index2 是要删除的最后一个映射的索引。

如果指定 -c,映射也适用于当前工作目录。

如果指定 -s,则以 dbx 可以读取的输出格式列出现有映射。

如果指定 -d,则删除指定映射。

示例

(dbx) pathmap /export/home/work1 /net/mmm/export/home/work2
  # maps /export/home/work1/abc/test.c to /net/mmm/export/home/work2/abc/test.c
(dbx) pathmap /export/home/newproject
  # maps /export/home/work1/abc/test.c to /export/home/newproject/test.c
(dbx) pathmap
(1) -c /tmp_mnt /
(2) /export/home/work1 /net/mmm/export/home/work2
(3) /export/home/newproject

pop 命令

pop 命令用于从调用栈中删除一个或多个帧。仅在本地模式中有效。

弹出过程只能到达使用 -g 编译的函数的帧。程序计数器会重置为调用点的源代码行开头。无法弹出调试器调用的函数之后的帧;可使用 pop -c

通常 pop 命令会调用与弹出帧关联的所有 C++ 析构函数;可通过将 dbx 环境变量 pop_auto_destruct 设置为 off(请参见设置 dbx 环境变量)来覆盖此行为。

语法

pop

从栈中弹出当前顶部帧。

pop number

从栈中弹出 number

pop -f number

从栈中弹出帧,直至达到指定的帧号 number

pop -c

弹出从调试器中进行的最后一个调用。

其中:

number 是要从栈中弹出的帧数。

print 命令

在本地模式中,print 命令用于输出表达式的值。在 Java 模式中,print 命令用于输出表达式、局部变量或参数的值。

本地模式语法

print expression, ...

输出表达式 expression, ... 的值。

print -r expression

输出表达式 expression 的值,包括其继承成员(仅限于 C++)。

print +r expression

dbx 环境变量 output_inherited_members 为 on 时,不输出继承成员(仅限于 C++)。

print -d [-r] expression

显示动态类型而不是静态类型的表达式 expression(仅限于 C++)。

print +d [-r] expression

dbx 环境变量 output_dynamic_type 为 on 时,不使用动态类型的表达式 expression(仅限于 C++)。

print -s expression

输出当前 OpenMP 并列区域中每个线程的 expression 表达式的值(如果该表达式包含专用变量或线程专用变量)。

print -S [-r] [-d] expression

输出 expression 表达式的值,包括其静态成员(仅限于 C++)。

print +S [-r] [-d] expression

dbx 的环境变量 show_static_members 设置为 on 时不输出静态成员(仅限于 C++)。

print -p expression

调用 prettyprint 函数。

print +p expression

dbx 环境变量 output_pretty_print 为 on 时,不调用 prettyprint 函数。

print -L expression

如果输出对象 expression 大于 4K,强制输出。

print +l expression

如果表达式是一个字符串 (char *),则只输出地址,不输出字符。

print -l expression

('Literal') 不输出左侧内容。如果表达式是一个字符串 (char *),则不输出地址,只输出字符串的原始字符,且不带引号。

print -fformat expression

使用 format 作为整数、字符串或浮点表达式的格式。

print -Fformat expression

使用指定格式但不输出左侧内容(变量名或表达式)。

print -o expression

以序数值形式输出必须是枚举的 expression 值。此处也可以使用格式字符串 (-fformat)。对于非枚举型表达式,忽略此选项。

print -- expression

"--" 表示标志参数的结尾。如果 expression 以加号或减号开头,这很有用(有关作用域求解规则,请参见程序作用域)。

其中:

expression 是要输出其值的表达式。

format 是输出表达式时要使用的输出格式。如果该格式不适用于指定类型,则会默认忽略该格式字符串,dbx 将使用其内置输出机制。

允许的格式是 printf(3S) 命令使用的格式的子集。遵循以下约束:

Java 模式语法

print expression, ... | ...

输出表达式 expression, ... 或标识符 identifier, ...

print -r expression | identifier

输出 expressionidentifier 的值,包括其继承成员。

print +r expression | identifier

dbx 环境变量 output_inherited_members 为 on 时,不输出继承成员。

print -d [-r] expression | identifier

显示动态类型而不是静态类型 expressionidentifier

print +d [-r] expression | identifier

dbx 环境变量 output_dynamic_type 为 on 时,不使用动态类型的 expressionidentifier

print -- expression | identifier

"--" 表示标志参数的结尾。如果 expression 以加号或减号开头,这很有用(有关作用域求解规则,请参见程序作用域)。

其中:

class_name 是 Java 类的名称,可以使用包路径(使用句点 (.) 作为限定符,例如 test1.extra.T1.Inner),也可以使用完整路径名(前面加磅符号 (#), 并使用斜线 (/) 和美元符号 ($) 作为限定符,例如 #test1/extra/T1$Inner)。如果使用 $ 限定符,请使用引号将 class_name 引起来。

expression 是要输出其值的 Java 表达式。

field_name 是类中字段的名称。

identifier 是一个局部变量或参数,包括 this、当前类实例变量 (object_name.field_name) 或类(静态)变量 (class_name.field_name)。

object_name 是 Java 对象的名称。

proc 命令

proc 命令用于显示当前进程的状态。在本地模式和 Java 模式中,它的语法和功能相同。

语法

proc -map

显示装入对象列表及地址。

proc -pid

显示当前进程 ID (pid)。

prog 命令

prog 命令用于管理调试的程序及其属性。在本地模式和 Java 模式中,它的语法和功能相同。

语法

prog -readsyms

读取由于将 dbx 环境变量 run_quick 设置为 on 而延迟的符号信息。

prog -executable

输出可执行文件的完整路径,如果使用 - 连接了程序,则使用 -

prog -argv

输出全部 argv,包括 argv[0]

prog -args

输出 argv,不包括 argv[0]

prog -stdin

输出 < filename;如果使用 stdin,则为空。

prog -stdout

输出 > filename>> filename;如果使用 stdout,则为空。-args-stdin-stdout 的输出有特定格式,以便可以组合字符串并在 run 命令中重用(请参见run 命令)。

quit 命令

quit 命令用于退出 dbx。在本地模式和 Java 模式中,它的语法和功能相同。

如果 dbx 连接到某个进程,在退出之前会分离该进程。如果有待决信号,它们将被取消。可使用 detach 命令(请参见detach 命令)进行更好的控制。

语法

quit

退出 dbx 且返回代码 0。与 exit 相同。

quit n

退出且返回代码为 n。与 exit n 相同。

其中:

n 是返回代码。

regs 命令

regs 命令用于输出寄存器的当前值。仅在本地模式中有效。

语法

regs [-f] [-F]

其中:

-f 表示包括浮点寄存器(单精度)(仅限于 SPARC 平台)

-F 表示包括浮点寄存器(双精度)(仅限于 SPARC 平台)

示例(SPARC 平台)


dbx[13] regs -F
current thread: t@1
current frame:  [1]
g0-g3              0x00000000 0x0011d000 0x00000000 0x00000000
g4-g7              0x00000000 0x00000000 0x00000000 0x00020c38
o0-o3              0x00000003 0x00000014 0xef7562b4 0xeffff420
o4-o7              0xef752f80 0x00000003 0xeffff3d8 0x000109b8
l0-l3              0x00000014 0x0000000a 0x0000000a 0x00010a88
l4-l7              0xeffff438 0x00000001 0x00000007 0xef74df54
i0-i3              0x00000001 0xeffff4a4 0xeffff4ac 0x00020c00
i4-i7              0x00000001 0x00000000 0xeffff440 0x000108c4
y                  0x00000000
psr                0x40400086
pc                 0x000109c0:main+0x4    mov     0x5, %l0
npc                0x000109c4:main+0x8    st      %l0, [%fp - 0x8]
f0f1               +0.00000000000000e+00
f2f3               +0.00000000000000e+00
f4f5               +0.00000000000000e+00
f6f7               +0.00000000000000e+00

replay 命令

replay 命令用于重放自上次执行 runrerundebug 命令之后执行的调试命令。仅在本地模式中有效。

语法

replay [-number]

重放自上次执行 run 命令、rerun 命令或 debug 命令之后执行的所有命令或所有命令减去 number 个命令后所剩的命令。

其中:

number 是不重放的命令个数。

rerun 命令

rerun 命令用于在不使用参数的情况下运行程序。在本地模式和 Java 模式中,它的语法和功能相同。

语法

rerun

在不使用参数的情况下开始执行程序。

rerun arguments

使用 save 命令(请参见save 命令)保存的新参数开始执行程序。

restore 命令

restore 命令用于将 dbx 恢复到先前保存的状态。仅在本地模式中有效。

语法

restore [file_name ]

其中:

file_name 是文件名,该文件保存了自上次执行 runrerundebug 命令之后执行的 dbx 命令。

rprint 命令

rprint 命令用于采用 shell 引用规则输出表达式。仅在本地模式中有效。

语法

rprint [-r|+r|-d|+d|-S|+S|-p|+p|-L|-l|-f format | -Fformat | -- ] expression

输出表达式的值。没有应用特殊的引用规则,因此 rprint a > ba 的值(如果存在)存入文件 b(有关这些标志的含义,请参见print 命令)。

其中:

expression 是要输出其值的表达式。

format 是输出表达式时要使用的输出格式。有关有效格式的信息,请参见print 命令

rtc showmap 命令

rtc showmap 命令用于报告按测试类型(分支和陷阱)分类的程序文本的地址范围。仅在本地模式中有效。

语法

rtc showmap

此命令适用于专家用户。运行时检查为访问检查提供程序文本。根据可用资源的情况,该测试类型可以是分支或陷阱指令。rtc showmap 命令用于报告按测试类型分类的程序文本的地址范围。此映射可用于查找最优位置以便添加补丁区域目标文件,以及用于避免自动使用陷阱。有关详细信息,请参见运行时检查限制

rtc skippatch 命令

rtc skippatch 命令用于使装入对象、目标文件和函数免受运行时检查对其进行程序校验。除非显式将装入对象卸载,否则该命令就会对每个 dbx 会话产生永久性的影响。

由于 dbx 不对该命令影响的装入对象、目标文件和函数中的内存访问进行跟踪,因此对于没有跳过的函数,会报告不正确的 rui 错误。dbx 无法确定 rui 错误是否由该命令引起,因此不会自动抑制此类错误。

语法

rtc skippatch load_object ...

使指定的装入对象免受程序校验。

rtc skippatch load_object [- o object_file ...] [-f function ...]

使指定装入对象中的指定目标文件和函数免受程序校验。

其中:

load_object 是装入对象的名称或装入对象名称的路径。

object_file 是目标文件的名称。

function 是函数名。

run 命令

run 命令用于在使用参数的情况下运行程序。

使用 Ctrl-C 停止执行程序。

本地模式语法

run

使用当前参数开始执行程序。

run arguments

使用新参数开始执行程序。

run ... >|>> output_file

设置输出重定向。

run ... < input_file

设置输入重定向。

其中:

arguments 是运行目标进程时要使用的参数。

input_file 是要从中重定向输入的文件的文件名。

output_file 是要将输出重定向至的文件的文件名。


注 –

目前无法使用 runrunargs 命令重定向 stderr


Java 模式语法

run

使用当前参数开始执行程序。

run arguments

使用新参数开始执行程序。

其中:

arguments 是运行目标进程时要使用的参数。这些参数传递给 Java 应用程序,而不是 JVM 软件。不要把主类名当作参数。

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

在某一运行中设置的断点将在后续运行中持续。

runargs 命令

runargs 命令用于更改目标进程的参数。在本地模式和 Java 模式中,它的语法和功能相同。

可以在不使用参数的情况下执行 debug 命令(请参见debug 命令)检查目标进程的当前参数。

语法

runargs arguments

设置要由 run 命令使用的当前参数(请参见run 命令)。

runargs ... >|>>file

设置要由 run 命令使用的输出重定向。

runargs ... <file

设置要由 run 命令使用的输入重定向。

runargs

清除当前参数。

其中:

arguments 是运行目标进程时要使用的参数。

file 是目标进程的输出重定向到或从中重定向目标进程的输入的文件。

save 命令

save 命令由于将命令保存到文件中。仅在本地模式中有效。

语法

save [ -number ] [ file_name ]

将自上次执行 run 命令、rerun 命令或 debug 命令之后执行的所有命令或所有命令减去 number 个命令所剩的命令保存到缺省文件或 file_name 中。

其中:

number 是不保存的命令个数。

filename 是文件名,该文件保存了自上次执行 runrerundebug 命令之后执行的 dbx 命令。

scopes 命令

scopes 命令用于输出活动作用域列表。仅在本地模式中有效。

语法

scopes

search 命令

search 命令用于在当前源文件中向前搜索。仅在本地模式中有效

语法

search string

在当前文件中向前搜索 string

search

使用上一个搜索字符串重复搜索。

其中:

string 是要搜索的字符串。

showblock 命令

showblock 命令用于显示进行运行时检查时分配特定堆块的位置。仅在本地模式中有效。

启用了运行时检查时,showblock 命令将显示有关指定地址处堆块的详细信息。详细信息包括块分配的位置及其大小。请参见check 命令

语法

showblock -a address

其中:

address 是堆块的地址。

showleaks 命令


注 –

只能在 Solaris 平台上执行 showleaks 命令。


在缺省的非冗余情况下,对于每个泄漏记录输出一行报告。先报告实际泄漏,然后再报告可能的泄漏。报告按泄漏的合并大小排序。

语法

showleaks [-a] [-m m ] [-n number] [-v]

其中:

-a 表示显示迄今为止生成的所有泄漏(不仅仅是上次执行 showleaks 命令之后出现的泄漏)。

-m m 表示合并泄漏;如果两个或更多泄漏分配时的调用栈与 m 帧匹配,则在一个合并泄漏报告中报告这些泄漏。如果指定 -m 选项,它将覆盖通过 check 命令指定的 m 的全局值(请参见check 命令)。

-n number 表示在报告中最多显示 number 个记录。缺省值为显示所有记录。

-v 生成冗余输出。缺省值为显示非冗余输出。

showmemuse 命令

对于每个“使用的块”记录均输出一行报告。命令将按块的合并大小排序报告。报告中还包括自上次执行 showleaks 命令以来的所有泄漏块(请参见showleaks 命令)。

语法

showmemuse [-a] [-m m] [-n number] [-v]

其中:

-a 显示所有使用的块(不仅仅是上次执行 showmemuse 命令之后使用的块)。

-m m 表示合并使用的块报告。m 的缺省值为 2 或上次通过 check 命令指定的全局值(请参见check 命令)。如果两个或更多块分配时的调用栈与 m 帧匹配,则在一个合并报告中报告这些块。如果指定 -m 选项,则它将覆盖 m 的全局值。

-n number 表示在报告中最多显示 number 个记录。缺省值为 20。

-v 表示生成详细输出。缺省值为显示非冗余输出。

source 命令

source 命令用于执行指定文件中的命令。仅在本地模式中有效。

语法

source file_name

执行文件 file_name 中的命令。不搜索 $PATH

status 命令

status 命令用于列出事件处理程序(断点等)。在本地模式和 Java 模式中,它的语法和功能相同。

语法

status

输出正在使用的 trace、when 和 stop 断点。

status handler_id

输出处理程序 handler_id 的状态。

status -h

输出正在使用的 trace、when 和 stop 断点,包括隐藏的断点。

status -s

相同,但 dbx 可以读取输出。

其中:

handler_id 是事件处理程序的标识符。

示例


(dbx) status -s > bpts
...
(dbx) source bpts

step 命令

step 命令用于单步执行源代码或语句(步入使用 -g 选项编译的调用)。

dbx 环境变量 step_events 控制单步执行过程中是否启用断点。

dbx step_granularity 环境变量控制源代码行单步执行的粒度。

dbx step_abflow 环境变量控制在检测到将要发生“异常”控制流更改时 dbx 是否停止。 调用 siglongjmp()longjmp() 或异常抛出可能会导致出现此类控制流更改。

本地模式语法

step

单步执行一行(步入调用)。对于多线程程序,步过函数调用时,为了避免死锁,会在该函数调用期间隐式恢复所有线程。非活动线程无法单步执行。

step n

单步执行 n 行(步入调用)。

step up

向下单步执行并步出当前函数。

step ... -sig signal

单步执行时传递指定信号。如果该信号存在信号处理程序,并且使用 -g 选项编译了该信号处理程序,则步入该信号处理程序。

step ...thread_id

单步执行指定线程。不适用于 step up

step ...lwp_id

单步执行指定 LWP。步过函数时,不隐式恢复所有 LWP。

step to [ function ]

尝试步入从当前源代码行调用的 function。如果未指定 function,则步入上一个调用的函数,这有助于避免出现过长的 step 命令和 step up 命令序列。例如,上一个函数为:

f()->s()-t()->last();

last(a() + b(c()->d()));

其中:

n 是要单步执行的行数。

signal 是信号名。

thread_id 是线程 ID。

lwp_id 是 LWP ID。

function 是函数名。

只有指定显式 lwp_id 时,通用 step 命令的死锁避免措施才不起作用。

在执行 step to 命令时,如果尝试步入上一个汇编调用指令或步入当前源代码行中的函数(如果指定),则调用可能因条件分支而无法进行。在不执行调用或当前源代码行中没有函数调用的情况下,step to 命令会步过当前源代码行。使用 step to 命令时,需要特别注意用户自定义的运算符。

有关机器级步进信息,另请参见stepi 命令

Java 模式语法

step

单步执行一行(步入调用)。对于多线程程序,步过方法调用时,为了避免死锁,会在该方法调用期间隐式恢复所有线程。非活动线程无法单步执行。

step n

单步执行 n 行(步入调用)。

step up

向下单步执行并步出当前方法。

step ...thread_id

单步执行指定线程。不适用于 step up

step ...lwp_id

单步执行指定 LWP。步过方法时,不隐式恢复所有 LWP。

stepi 命令

stepi 命令用于单步执行一个机器指令(步入调用)。仅在本地模式中有效。

语法

stepi

单步执行一个机器指令(步入调用)。

stepi n

单步执行 n 个机器指令(步入调用)。

stepi -sig signal

单步执行并传递指定信号。

stepi ...lwp_id

单步执行指定 LWP。

stepi ...thread_id

单步执行指定线程在其中处于活动状态的 LWP。

其中:

n 是要单步执行的指令个数。

signal 是信号名。

lwp_id 是 LWP ID。

thread_id 是线程 ID。

stop 命令

stop 命令用于设置源码级断点。

语法

stop 命令的通用语法如下:

stop event_specification [modifier]

发生指定事件时,停止进程。

本地模式语法

下面的特定语法是在本地模式下有效的其中一些较重要的语法。有关其他事件,请参见设置事件规范

stop [ -update ]

立刻停止执行。仅在 when 命令的主体中有效。

stop -noupdate

立刻停止执行,但不更新 Oracle Solaris Studio IDE 调试器窗口。

stop access mode address_expression [, byte_size_expression ]

在访问了通过 address_expression 指定的内存时停止执行。另请参见访问地址时停止执行

stop at line-number

line_number 处停止执行。另请参见在源代码行设置 stop 断点

stop change variable

variable 的值发生了更改时停止执行。

stop cond condition_expression

condition_expression 表示的条件的求值结果为 true 时停止执行。

stop in function

调用 function 时停止执行。另请参见在函数中设置 stop 断点

stop inclass class_name [ -recurse | -norecurse ]

仅限于 C++: 对类、结构、联合或模板类的所有成员函数设置断点。-norecurse 是缺省值。如果指定 -recurse,则包括基类。另请参见在类的所有成员函数中设置断点

stop infile file_name

调用 file_name 中的任何函数时停止执行。

stop infunction name

仅限于 C++: 对所有非成员函数 name 设置断点。

stop inmember name

仅限于 C++:对所有成员函数 name 设置断点。请参见在不同类的成员函数中设置断点

stop inobject object_expression [ -recurse | -norecurse ]

仅限于 C++: 在从对象 object_expression 调用类及其所有基类的任何非静态方法的入口处设置断点。-recurse 是缺省值。如果指定 - norecurse,则不包括基类。另请参见在对象中设置断点

line_number 是源代码行的编号。

function 是函数名。

class_name 是 C++ 类、结构、联合或模板类的名称。

mode 指定内存访问模式。可由以下一个或所有字母组成:

r

已读取指定地址处的内存。

w

已写入内存。

x

已执行内存。

mode 也可以包含:

a

访问后停止进程(缺省值)。

b

访问前停止进程。

name 是 C++ 函数的名称。

object_expression 标识的是 C++ 对象。

variable 是变量名。

下列修饰符在本地模式中有效。

-if condition_expression

只有在 condition_expression 的求值结果为 true 时,才会发生指定的事件。

-in function

只有在 function 范围内发生指定事件时,执行才会停止。

-count number

从 0 开始,每次发生事件时,计数器的计数便会增加。达到 number 时,执行便停止,且计数器重置为 0。

-count infinity

从 0 开始,每次发生事件时,计数器的计数便会增加。执行没有停止。

-temp

创建发生事件时会删除的临时断点。

-disable

创建禁用状态的断点。

-instr

执行指令级变量。例如,step 变为指令级单步执行,而 at 使用文本地址而不是行号作为参数。

-perm

使相应事件在 debug 中保持持久性。有些事件(如断点)不适合保持持久性。delete all 不会删除持久性的处理程序,可使用 delete hid

-hidden

通过 status 命令隐藏事件。一些导入模块可能会选择使用它。可使用 status -h 查看它们。

-lwp lwp_id

只有在给定的 LWP 中发生指定的事件时,执行才会停止。

-thread thread_id

只有在给定的线程中发生指定的事件时,执行才会停止。

Java 模式语法

下列特定语法在 Java 模式中有效。

stop access mode class_name.field_name

访问了 class_name .field_name 指定的内存时停止执行。

stop at line_number

line_number 处停止执行。

stop at file_name:line_number

file_name 中的 line_number 处停止执行。

stop change class_name.field_name

class_name 中的 field_name 值发生了更改时停止执行。

stop classload

在加载任何类时停止执行。

stop classload class_name

装入 class_name 时停止执行。

stop classunload

在卸载任何类时停止执行。

stop classunload class_name

卸载 class_name 时停止执行。

stop cond condition_expression

condition_expression 表示的条件的求值结果为 true 时停止执行。

stop in class_name.method_name

输入了 class_name.method_name 且将要执行第一行时停止执行。如果未指定参数且重载方法,则会显示方法列表。

stop in class_name.method_name([ parameters])

输入了 class_name.method_name 且将要执行第一行时停止执行。

stop inmethod class_name.method_name

对所有非成员方法 class_name.method_name 设置断点。

stop inmethod class_name.method_name ([ parameters])

对所有非成员方法 class_name.method_name 设置断点。

stop throw

抛出了 Java 异常时停止执行。

stop throw type

抛出了 type 类型的 Java 异常时停止执行。

其中:

class_name 是 Java 类的名称,可以使用包路径(使用句点 (.) 作为限定符,例如 test1.extra.T1.Inner),也可以使用完整路径名(前面加磅符号 (#), 并使用斜线 (/) 和美元符号 ($) 作为限定符,例如 #test1/extra/T1$Inner)。如果使用 $ 限定符,请使用引号将 class_name 引起来。

condition_expression 可以是任何表达式,但其求值结果必须为整型。

field_name 是类中字段的名称。

file_name 是文件名。

line_number 是源代码行的编号。

method_name 是 Java 方法的名称。

mode 指定内存访问模式。可由以下一个或所有字母组成:

r

已读取指定地址处的内存。

w

已写入内存。

mode 也可以包含:

b

访问前停止进程。

程序计数器将指向违例指令。

parameters 是方法的参数。

type 是 Java 异常的类型。类型可以是 -unhandled-unexpected

下列修饰符在 Java 模式中有效:

-if condition_expression

只有在 condition_expression 的求值结果为 true 时,才会发生指定的事件。

-count number

从 0 开始,每次发生事件时,计数器的计数便会增加。达到 number 时,执行便停止,且计数器重置为 0。

-count infinity

从 0 开始,每次发生事件时,计数器的计数便会增加。执行没有停止。

-temp

创建发生事件时会删除的临时断点。

-disable

创建禁用状态的断点。

有关设置机器级断点的信息,另请参见stopi 命令

有关所有事件的列表和语法,请参见设置事件规范

stopi 命令

stopi 命令用于设置机器级断点。仅在本地模式中有效。

语法

stop 命令的通用语法如下:

stopi event_specification [modifier]

发生指定事件时,停止进程。

下列特定语法有效:

stopi at address

address 位置处停止执行。

stopi in function

调用 function 时停止执行。

其中:

address 是可产生地址或可用作地址的任何表达式。

function 是函数名。

有关所有事件的列表和语法,请参见设置事件规范

suppress 命令

suppress 命令用于禁止在运行时检查期间报告内存错误。仅在本地模式中有效。

如果 dbx 环境变量 rtc_auto_suppress 为 on,则只报告一次指定位置处的内存错误。

语法

suppress

suppressunsuppress 命令(不包括指定 -d-reset 选项的那些命令)的历史记录。

suppress -d

在未被编译用于调试的函数中禁止的错误列表(缺省禁止)。每个装入对象都有这样一个列表。只能通过使用带 -d 选项的 unsuppress 命令来取消禁止这些错误。

suppress -d errors

通过进一步抑制 errors 来修改所有装入对象的缺省禁止。

suppress -d errors in load_objects

通过进一步禁止 errors 来修改 load_objects 中的缺省禁止。

suppress -last

在错误位置禁止当前错误。

suppress -reset

将缺省禁止设置为初始值(启动时)。

suppress -r id...

删除按 id 指定的取消抑制事件,可通过 unsuppress 命令获取这些事件(请参见 unsuppress 命令)。

suppress -r 0 | all | -all

删除 unsuppress 命令指定的所有取消抑制事件(请参见unsuppress 命令)。

suppress errors

禁止各处的 errors

suppress errors in [ functions ] [ files ] [ load_objects ]

禁止 functions 列表、files 列表和 load_objects 列表中的 errors

suppress errors at line

禁止 line 处的 errors

suppress errors at "file":line

禁止 fileline 处的 errors

suppress errors addr address

禁止 address 位置处的 errors

其中:

address 是内存地址。

errors 由空格分隔开,可以是下列各项的任一组合:

all

所有错误

aib

可能的内存泄漏 - 地址位于块内

air

可能的内存泄漏 - 地址位于寄存器内

baf

错误释放

duf

重复释放

mel

内存泄漏

maf

未对齐释放

mar

未对齐读

maw

未对齐写

oom

内存不足

rob

从数组越界内存中读

rua

从未分配的内存中读

rui

从未初始化的内存中读

wob

写入到数组越界内存

wro

写入到只读内存

wua

写入到未分配内存

biu

使用的块(分配的内存)。尽管不是错误,但可以在 suppress 命令中使用 biu,就像使用 errors 一样。

file 是文件名。

files 是一个或多个文件名。

functions 是一个或多个函数名。

line 是源代码行的编号。

load_objects 是一个或多个装入对象名。

有关抑制错误的更多信息,请参见抑制错误

有关取消抑制错误的信息,请参见unsuppress 命令

sync 命令

sync 命令用于显示有关指定同步对象的信息。仅在本地模式中有效。


注 –

只能在 Solaris 平台上执行 sync 命令。


语法

sync -info address

显示有关指定地址的同步对象的信息。

其中:

address 是同步对象的地址。

syncs 命令

syncs 命令用于列出所有同步对象(锁)。仅在本地模式中有效。


注 –

只能在 Solaris 平台上执行 syncs 命令。


语法

syncs

thread 命令

thread 命令用于列出或更改当前线程。

本地模式语法

thread

显示当前线程。

thread thread_id

切换到线程 thread_id

在下列变量中,如果没有 thread_id,则表示当前线程。

thread -info [thread_id]

输出有关指定线程的所有信息。对于 OpenMP 线程,这些信息包括 OpenMP 线程 ID、并行区域 ID、任务区域 ID 及线程状态。

thread -hide [thread_id]

隐藏指定(或当前)线程。它将不会显示在通用线程列表中。

thread -unhide [thread_id]

取消隐藏指定(或当前)线程。

thread -unhide all

取消隐藏所有线程。

thread -suspend thread_id

阻止指定线程运行。在线程列表中挂起的线程标有 "S"。

thread -resume thread_id

撤消使用 -suspend 执行的操作。

thread -blocks [thread_id]

列出阻塞其他线程的指定线程所控制的所有锁。

thread -blockedby [thread_id]

显示哪个同步对象阻塞了指定线程(如果有)。

其中:

thread_id 是线程 ID。

Java 模式语法

thread

显示当前线程。

thread thread_id

切换到线程 thread_id

在下列变量中,如果没有 thread_id,则表示当前线程。

thread -info [thread_id]

输出有关指定线程的所有信息。

thread -hide [thread_id]

隐藏指定(或当前)线程。它将不会显示在通用线程列表中。

thread -unhide [thread_id]

取消隐藏指定(或当前)线程。

thread -unhide all

取消隐藏所有线程。

thread -suspend thread_id

阻止指定线程运行。在线程列表中挂起的线程标有 "S"。

thread -resume thread_id

撤消使用 -suspend 执行的操作。

thread -blocks [thread_id]

列出 thread_id 拥有的 Java 监视器。

thread -blockedby [thread_id]

列出阻塞的 thread_id 所在的 Java 监视器。

其中:

thread_id 是格式为 t@numberdbx 样式的线程 ID 或为线程指定的 Java 线程名。

threads 命令

threads 命令用于列出所有线程。

本地模式语法

threads

输出所有已知线程列表。

threads -all

输出通常不输出的线程(僵停)。

threads -mode all|filter

控制是输出所有线程还是过滤线程。缺省值为过滤线程。启用了过滤时,不会列出已使用 thread -hide 命令隐藏的线程。

threads -mode auto|manual

在 IDE 下,启用自动更新线程列表。

threads -mode

回显当前模式。

每行信息由以下内容组成:

Java 模式语法

threads

输出所有已知线程列表。

threads -all

输出通常不输出的线程(僵停)。

threads -mode all|filter

控制是输出所有线程还是过滤线程。缺省值为过滤线程。

threads -mode auto|manual

在 IDE 下,启用自动更新线程列表。

threads -mode

回显当前模式。

列表中的每行信息由以下内容组成:

trace 命令

trace 命令用于显示执行的源代码行、函数调用或变量更改。

可使用 dbx 环境变量 trace_speed 设置跟踪速度。

如果 dbx 处于 Java 模式下,而您要在本地代码中设置 trace 断点,请使用 joff 命令(请参见joff 命令)切换到本地模式,或为 trace 命令添加前缀 native(请参见native 命令)。

如果 dbx 处于 JNI 模式下,而您要在 Java 代码中设置 trace 断点,请为 trace 命令添加前缀 java(请参见java 命令)。

语法

trace 命令的通用语法如下:

trace event_specification [modifier]

发生指定事件时,跟踪即被输出。

本地模式语法

下列特定语法在本地模式中有效:

trace -file file_name

将所有跟踪输出定向到指定的 file_name。要将跟踪输出还原为标准输出,请用 - 表示 file_name。跟踪输出始终附加到 file_name 后面。每当显示 dbx 提示以及应用程序退出时都会刷新。在执行新的运行或连接后继续运行时总是会重新打开 file_name

trace step

跟踪每个源代码行、函数调用并返回。

trace next -in function

跟踪指定 function 中每个源代码行。

trace at line_number

跟踪指定源码行 line

trace in function

跟踪对指定 function 的调用及其返回。

trace infile file_name

跟踪对 file_name 中所有函数的调用及其返回。

trace inmember function

跟踪对所有名为 function 的成员函数的调用。

trace infunction function

调用任何名为 function 的函数时跟踪。

trace inclass class

跟踪对所有 class 的成员函数的调用。

trace change variable

跟踪对 variable 的更改。

其中:

file_name 是跟踪输出要发送到的文件的名称。

function 是函数名。

line_number 是源代码行的编号。

class 是类名。

variable 是变量名。

下列修饰符在本地模式中有效。

-if condition_expression

只有在 condition_expression 的求值结果为 true 时,才会发生指定的事件。

-in function

只有在 function 中发生指定的事件时,执行才会停止。

-count number

从 0 开始,每次发生事件时,计数器的计数便会增加。达到 number 时,执行便停止,且计数器重置为 0。

-count infinity

从 0 开始,每次发生事件时,计数器的计数便会增加。执行没有停止。

-temp

创建发生事件时会删除的临时断点。

-disable

创建禁用状态的断点。

-instr

执行指令级变量。例如,step 变为指令级单步执行,而 at 使用文本地址而不是行号作为参数。

-perm

使相应事件在 debug 中保持持久性。有些事件(如断点)不适合保持持久性。delete all 不会删除持久性的处理程序,可使用 delete hid

-hidden

通过 status 命令隐藏事件。一些导入模块可能会选择使用它。可使用 status -h 查看它们。

-lwp lwpid

只有在给定的 LWP 中发生指定的事件时,执行才会停止。

-thread thread_id

只有在给定的线程中发生指定的事件时,执行才会停止。

Java 模式语法

下列特定语法在 Java 模式中有效。

trace -file file_name

将所有跟踪输出定向到指定的 file_name。要将跟踪输出还原为标准输出,请使用 - 表示 file_name。跟踪输出始终附加到 file_name 后面。每当显示 dbx 提示以及应用程序退出时都会刷新。在执行新的运行或连接后继续运行时总是会重新打开 file_name

trace at line_number

跟踪 line_number

trace at file_name.line_number

跟踪指定的源码 file_name.line_number

trace in class_name.method_name

跟踪对 class_name.method_name 的调用及其返回。

trace in class_name.method_name([ parameters])

跟踪对 class_name.method_name([parameters]) 的调用及其返回。

trace inmethod class_name.method_name

在调用任何名为 class_name.method_name 的方法时跟踪。

trace inmethod class_name.method_name[( parameters)]

在调用任何名为 class_name.method_name [(parameters)] 的方法时跟踪。

其中:

class_name 是 Java 类的名称,可以使用包路径(使用句点 (.) 作为限定符,例如 test1.extra.T1.Inner),也可以使用完整路径名(前面加磅符号 (#),并使用斜线 (/) 和美元符号 ($) 作为限定符,例如 #test1/extra/T1$Inner)。如果使用 $ 限定符,请使用引号将 class_name 引起来。

file_name 是文件名。

line_number 是源代码行的编号。

method_name 是 Java 方法的名称。

parameters 是方法的参数。

下列修饰符在 Java 模式中有效。

-if condition_expression

只有在 condition_expression 的求值求值结果为 true 时,才会发生指定事件并输出跟踪。

-count number

从 0 开始,每次发生事件时,计数器的计数便会增加。达到 number 时,便输出跟踪,且计数器重置为 0。

-count infinity

从 0 开始,每次发生事件时,计数器的计数便会增加。执行没有停止。

-temp

创建发生了事件且输出了跟踪时会删除的临时断点。如果 -temp-count 一起使用,则仅当计数器重置为 0 时才删除断点。

-disable

创建禁用状态的断点。

有关所有事件的列表和语法,请参见设置事件规范

tracei 命令

tracei 命令用于显示机器指令、函数调用或变量更改。仅在本地模式中有效。

tracei 实际上是 trace event-specification -instr 的简称,其中 - instr 修饰符表示在指令粒度而非源代码行粒度上进行跟踪。发生事件时,信息以反汇编格式而非源代码行格式输出。

语法

tracei step

跟踪每个机器指令。

tracei next -in function

跟踪指定 function 中的每个指令。

tracei at address_expression

跟踪 address 处的指令。

tracei in function

跟踪对指定 function 的调用及其返回。

tracei inmember function

跟踪对所有名为 function 的成员函数的调用。

tracei infunction function

调用任何名为 function 的函数时跟踪。

tracei inclass class

跟踪对所有 class 的成员函数的调用。

tracei change variable

跟踪对 variable 的更改。

其中:

filename 是跟踪输出要发送到的文件的名称。

function 是函数名。

line 是源代码行的编号。

class 是类名。

variable 是变量名。

有关更多信息,请参见trace 命令

uncheck 命令

uncheck 命令用于禁用检查内存访问、泄漏或使用。仅在本地模式中有效。

语法

uncheck

输出当前检查状态。

uncheck -access

关闭访问检查。

uncheck -leaks

关闭泄漏检查。

uncheck -memuse

关闭内存使用检查(同时也关闭泄漏检查)。

uncheck -all

等效于 uncheck -access; uncheck -memuse

uncheck [functions] [files] [loadobjects]

等效于 functions files loadobjects 中的 suppress all

其中:

functions 是一个或多个函数名。

files 是一个或多个文件名。

loadobjects 是一个或多个装入对象名。

有关开启检查的信息,请参见check 命令

有关抑制错误的信息,请参见suppress 命令

有关运行时检查的简介,请参见运行时检查功能

undisplay 命令

undisplay 命令用于撤消 display 命令。

本地模式语法

undisplay expression, ...

撤消 display expression 命令。

undisplay n, ...

撤消编号为 n、... 的所有 display 命令。

undisplay 0

撤消所有 display 命令。

其中:

expression 是有效的表达式。

Java 模式语法

undisplay expression, ... | identifier, ...

撤消 display expression, ... 或 display identifier, ... 命令。

undisplay n, ...

撤消编号为 n、... 的 display 命令。

undisplay 0

撤消所有 display 命令。

其中:

expression 是有效的 Java 表达式。

field_name 是类中字段的名称。

identifier 是一个局部变量或参数,包括 this、当前类实例变量 (object_name.field_name) 或类(静态)变量 (class_name.field_name)。

unhide 命令

unhide 命令用于撤消 hide 命令。仅在本地模式中有效。

语法

unhide 0

删除所有栈帧过滤器。

unhide regular_expression

删除栈帧过滤器 regular_expression

unhide number

删除编号为 number 的栈帧过滤器。

其中:

regular_expression 是正则表达式。

number 是栈帧过滤器的编号。

hide 命令(请参见捕获浮点异常)用于列出过滤器及其编号。

unintercept 命令

unintercept 命令用于撤消 intercept 命令(仅限于 C++)。仅在本地模式中有效。

语法

unintercept intercepted_typename [, intercepted_typename ... ]

intercept 列表中删除类型为 intercepted_typename 的抛出。

unintercept -a[ll]

intercept 列表中删除所有类型的所有抛出。

unintercept -x excluded_typename [, excluded_typename ... ]

excluded 列表中删除 excluded_typename

unintercept -x -a[ll]

excluded 列表中删除所有类型的所有抛出。

unintercept

列出被拦截的类型。

其中:

included_typenameexcluded_typename 是异常类型规范,如 List <int>unsigned short

unsuppress 命令

unsuppress 命令用于撤消 suppress 命令。仅在本地模式中有效。

语法

unsuppress

suppressunsuppress 命令(不包括指定 -d-reset 选项的那些命令)的历史记录。

unsuppress -d

未被编译用于调试的函数中取消禁止的错误列表。每个装入对象都有这样一个列表。任何其他错误都只能使用带 -d 选项的 suppress 命令来抑制(请参见suppress 命令)。

unsuppress -d errors

通过进一步取消禁止 errors 来修改所有装入对象的缺省禁止。

unsuppress -d errors in loadobjects

通过进一步取消禁止 errors 来修改 loadobjects 中的缺省禁止。

unsuppress -last

在错误位置启用当前错误。

unsuppress -reset

将缺省禁止屏蔽设置为初始值(启动时)。

unsuppress errors

取消禁止各处的 errors

unsuppress errors in [functions] [files] [loadobjects]

禁止 functions 列表、files 列表和 loadobjects 列表中的 errors

unsuppress errors at line

取消禁止 line 处的 errors

unsuppress errors at "file"line

取消禁止 fileline 处的 errors

unsuppress errors addr address

取消禁止 address 位置处的 errors

unwatch 命令

unwatch 命令用于撤消 watch 命令。仅在本地模式中有效。

语法

unwatch expression

撤消 watch expression 命令。

unwatch n

撤消编号为 nwatch 命令。

unwatch 0

撤消所有 watch 命令。

其中:

expression 是有效的表达式。

up 命令

up 命令用于上移调用栈(靠近 main)。在本地模式和 Java 模式中,它的语法和功能相同。

语法

up

调用栈上移一级。

up number

调用栈上移 number 级。

up -h [number]

上移调用栈,但不跳过隐藏的帧。

其中:

number 是调用栈级数。

use 命令

use 命令用于列出或更改目录搜索路径。仅在本地模式中有效。

此命令已过时,该命令的用途已由下列 pathmap 命令实现:

use 等效于 pathmap -s

use directory 等效于 pathmap directory

watch 命令

watch 命令用于在每个停止点处以相应点的当前作用域对表达式求值并进行输出。由于在到达入口点时不会分析表达式,因此无法立即检验表达式是否正确。watch 命令仅在本地模式中有效。

语法

watch

输出所显示的表达式列表。

watch expression

监视每个停止点处表达式 expression 的值。

watch [-r|+r|-d|+d|-S|+S|-p|+p|-L|-fformat |-Fformat|--] expression

有关这些标志的含义,请参见print 命令

其中:

expression 是有效的表达式。

format 是输出表达式时要使用的输出格式。有关有效格式的信息,请参见print 命令

whatis 命令

在本地模式中,whatis 命令用于输出表达式的类型或类型声明。如果适用,它还输出 OpenMP 数据共享属性信息。

在 Java 模式中,whatis 命令用于输出标识符声明。如果标识符是类,则它将输出类的方法信息(包括所有继承方法)。

本地模式语法

what is [-n] [-r] name

输出非类型为 name 的声明。

whatis -t [-r] type

输出类型为 type 的声明。

whatis -e [-r] [-d] expression

输出表达式 expression 的类型。

其中:

name 是非类型的名称。

type 是类型名。

expression 是有效的表达式。

-d 表示显示动态类型而非静态类型(仅限于 C++)。

-e 表示显示表达式的类型。

-n 表示显示非类型的声明。不必指定 -n;如果键入不带选项的 whatis 命令,缺省使用该值。

-r 表示输出有关基类的信息(仅限于 C++)。

-t 表示显示类型的声明。

对 C++ 类或结构运行 whatis 命令时,它将提供一个列表,其中列出所有已定义的成员函数(未定义的成员函数不列出)、静态数据成员、类友元以及在该类中显式定义的数据成员。

如果指定 -r(递归)选项,将添加来自继承类的信息。

-d 标志与 -e 标志一起使用时表示使用动态类型的表达式。

对于 C++,模板相关标识符显示如下:

Java 模式语法

whatis identifier

输出 identifier 的声明。

其中:

identifier 可以是类、当前类中的方法、当前帧中的局部变量或当前类中的字段。

when 命令

when 命令用于在发生指定事件时执行命令。

如果 dbx 处于 Java 模式下,而您要在本地代码中设置 when 断点,请使用 joff 命令(请参见joff 命令)切换到本地模式,或为 when 命令添加前缀 native(请参见native 命令)。

如果 dbx 处于 JNI 模式下,而您要在 Java 代码中设置 when 断点,请为 when 命令添加前缀 java(请参见java 命令)。

语法

when 命令的通用语法如下:

when event_specification [modifier]{command; ... }

发生指定事件时,执行上述命令。在 when 命令中禁止使用以下命令:

如果 cont 命令不带选项,则会忽略该命令。

本地模式语法

下列特定语法在本地模式中有效:

when at line_number { command; }

达到 line_number 时,执行 command

when in procedure { command; }

调用 procedure 时,执行 command

其中:

line_number 是源代码行的编号。

command 是命令名。

procedure 是过程名。

Java 模式语法

下列特定语法在 Java 模式中有效。

when at line_number

达到源码 line_number 时,执行命令。

when at file_name.line_number

达到 file_name.line_number 时,执行命令。

when in class_name.method_name

调用 class_name.method_name 时,执行命令。

when in class_name.method_name([ parameters])

调用 class_name.method_name([parameters]) 时,执行命令。

class_name 是 Java 类的名称,可以使用包路径(使用句点 (.) 作为限定符,例如 test1.extra.T1.Inner),也可以使用完整路径名(前面加磅符号 (#), 并使用斜线 (/) 和美元符号 ($) 作为限定符,例如 #test1/extra/T1$Inner)。如果使用 $ 限定符,请使用引号将 class_name 引起来。

file_name 是文件名。

line_number 是源代码行的编号。

method_name 是 Java 方法的名称。

parameters 是方法的参数。

有关所有事件的列表和语法,请参见设置事件规范

有关在发生指定的低级别事件时执行相应命令的信息,请参见wheni 命令

wheni 命令

wheni 命令用于在发生指定的低级别事件时执行命令。仅在本地模式中有效。

wheni 命令的通用语法如下:

语法

wheni event_specification [ modifier]{command... ; }

发生指定事件时,执行上述命令。

下列特定语法有效:

wheni at address_expression { command; }

达到 address_expression 时,执行 command

其中:

address 是可产生地址或可用作地址的任何表达式。

command 是命令名。

有关所有事件的列表和语法,请参见设置事件规范

where 命令

where 命令用于输出调用栈。对于 OpenMP 从属线程,如果相关帧仍处于活动状态,该命令还会输出主线程的栈跟踪。

本地模式语法

where

输出过程回溯。

where number

输出回溯中顶部的 number 帧。

where -f number

从第 number 帧开始回溯。

where -fp address_expression

认为 fp 寄存器中有 address_expression 值,并输出回溯。

where -h

包括隐藏的帧。

where -l

包括库名和函数名。

where -q

快速回溯(仅限于函数名)。

where -v

冗余回溯(包括函数参数和行信息)。

其中:

number 是调用栈帧数。

上述任一形式都可以与线程 ID 或 LWP ID 一起使用,以便获得指定实体的回溯。

fp(帧指针)寄存器已损坏时(在这种情况下,dbx 无法正常重建调用栈),-fp 选项很有用。此选项为测试某值是否为正确的 fp 寄存器值提供了方便。一旦确定了此值为正确的值,就可以使用 assign 命令或 lwp 命令对其进行设置。

Java 模式语法

where [thread_id]

输出方法回溯。

where [thread_id] number

输出回溯中顶部的 number 帧。

where -f [thread_id] number

从第 number 帧开始回溯。

where -q [thread_id]

快速回溯(仅限于方法名)。

where -v [thread_id]

冗余回溯(包括方法参数和行信息)。

其中:

number 是调用栈帧数。

thread_iddbx 样式的线程 ID 或为线程指定的 Java 线程名。

whereami 命令

whereami 命令用于显示当前源代码行。仅在本地模式中有效。

语法

whereami

显示与当前位置(栈顶部)对应的源代码行以及与当前帧对应的源代码行(如果不同)。

whereami -instr

同上,只不过输出的是当前反汇编指令而不是源代码行。

whereis 命令

whereis 命令用于输出指定名称的所有使用情况或地址的符号名称。仅在本地模式中有效。

语法

whereis name

输出 name 的所有声明。

whereis -a address_expression

输出 address_expression 的位置。

其中:

name 是作用域内可装入对象的名称,例如,变量、函数、类模板或函数模板。

address 是可产生地址或可用作地址的任何表达式。

which 命令

which 命令用于输出指定名称的全部限定。仅在本地模式中有效。

语法

which [-n] name

输出 name 的全部限定。

which -t type

输出 type 的全部限定。

其中:

name 是作用域内某对象的名称,例如,变量、函数、类模板或函数模板。

type 是类型名。

-n 表示显示非类型的全部限定。不必指定 -n;如果键入不带选项的 which 命令,缺省使用该值。

-t 表示显示类型的全部限定。

whocatches 命令

whocatches 命令用于指明捕获 C++ 异常的位置。仅在本地模式中有效。

语法

whocatches type

指明在当前执行点抛出类型为 type 的异常时捕获该异常的位置(如果无论如何都会捕获异常)。假定要执行的下一个语句是 throw x(其中 x 的类型为 type),将显示捕捉它的 catch 子句的行号、函数名称和帧号。

如果捕获点位于执行抛出操作的同一个函数内,将返回 "type is unhandled"

其中:

type 是异常的类型。