Oracle® Developer Studio 12.5:使用 dbx 调试程序

退出打印视图

更新时间: 2016 年 6 月
 
 

导航到代码

每当正在调试的程序停止时,dbx 都会输出与停止位置关联的源代码行。在每个程序停止位置,dbx 会将当前函数的值重置为程序在其中停止执行的函数。在程序开始运行前及程序停止运行时,您可以移动或导航到程序中其他地方的函数和文件。可导航到任何函数或文件,只要它们是程序的一部分。导航会设置当前作用域(请参见程序作用域)。 这对于确定要在何时以及在哪一源代码行设置 stop at 断点非常有用。

导航到文件

可以导航到 dbx 将其识别为程序一部分的任何文件,即使模块或文件未使用 -g 选项进行编译也是如此。要导航到文件:

(dbx) file filename

使用不带参数的 file 命令将回显当前导航的文件名。

(dbx) file

如果不指定行号,dbx 会从文件的第一行开始显示文件。

(dbx) file filename ; list line-number

有关更多信息,请参见在源代码行设置断点

导航到函数

可以使用 func 命令导航到函数。键入命令 func,后跟函数名。例如:

(dbx) func adjust-speed

func 命令本身会回显当前函数。

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

从 C++ 二义函数名称列表中选择

如果尝试导航到的 C++ 成员函数具有二义性名称或重载函数名称,系统将显示一个列表,其中会列出具有重载名称的所有函数。键入要导航的函数的号码。如果您知道函数所属的具体类,则可以键入类名和函数名。例如:

(dbx) func block::block

在多个具体值中进行选择

如果可从同一作用域级别访问多个符号,则 dbx 会输出一条报告二义性的消息。

(dbx) func main
(dbx) which C::foo
More than one identifier ’foo’.
Select one of the following:
 0) Cancel
 1) ”a.out”t.cc”C::foo(int)
 2) ”a.out”t.cc”C::foo()
>1
”a.out”t.cc”C::foo(int)

which 命令的上下文中,从具体值列表中进行选择不会影响 dbx 或程序的状态。 无论选择哪个具体值,dbx 都会回显名称。

输出源代码列表

使用 list 命令可输出文件或函数的源代码列表。 在文件中导航后,list 会从第一行开始输出 number 行。缺省数量为 10 行。在函数中导航后,list 会输出其代码行。

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

在调用堆栈中移动以导航到代码

如果存在活动进程,另一种导航到代码的方法是“在调用堆栈中移动”,即执行堆栈命令查看调用堆栈中当前存在的函数,这些函数代表当前处于活动状态的所有例程。在堆栈中移动会使当前函数和文件在您每次显示堆栈函数时发生变化。停止位置被视为位于堆栈的“底部”,因此,要离开该位置,请使用 up 命令,即向 mainbegin 函数方向移动。使用 down 命令可向当前帧方向移动。

有关更多信息,请参见堆栈中移动和返回起始位置