Sun Studio 12:使用 dbx 调试程序

导航到代码

当程序停止时,您可以导航到程序中其他地方的代码。可导航到任何函数或文件,只要它们是程序的一部分。导航会设置当前作用域(请参见程序作用域)。这对于确定要在何时以及在哪一源代码行设置 stop at 断点非常有用。

导航到文件

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


(dbx) file filename

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


(dbx) file

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


(dbx) file filename ; list line_number

有关在源代码行中设置 "stop at" 断点的信息,请参见在源代码行设置 stop 断点

导航到函数

可以使用 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 行。在函数中导航后,list 会打印其代码行。

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

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

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

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