每当正在调试的程序停止时,dbx 都会输出与停止位置关联的源代码行。在每个程序停止位置,dbx 会将当前函数的值重置为程序在其中停止执行的函数。在程序开始运行前及程序停止运行时,您可以移动或导航到程序中其他地方的函数和文件。可导航到任何函数或文件,只要它们是程序的一部分。导航会设置当前作用域(请参见程序作用域)。 这对于确定要在何时以及在哪一源代码行设置 stop at 断点非常有用。
可以导航到 dbx 将其识别为程序一部分的任何文件,即使模块或文件未使用 -g 选项进行编译也是如此。要导航到文件:
(dbx) file filename
(dbx) file
如果不指定行号,dbx 会从文件的第一行开始显示文件。
(dbx) file filename ; list line-number
有关更多信息,请参见在源代码行设置断点。
可以使用 func 命令导航到函数。键入命令 func,后跟函数名。例如:
(dbx) func adjust-speed
func 命令本身会回显当前函数。
有关更多信息,请参见func 命令
如果尝试导航到的 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 命令,即向 main 或 begin 函数方向移动。使用 down 命令可向当前帧方向移动。
有关更多信息,请参见堆栈中移动和返回起始位置。