Sun Studio 12 Update 1:使用 dbx 调试程序

调用函数

程序被停止时,可以使用 dbx call 命令调用函数,以此接受必须传递给被调用函数的参数值。

要调用过程,请键入函数名并提供其参数。例如:


(dbx) call change_glyph(1,3)

如果参数是可选项,则必须在 function_name 后键入括号。例如:


(dbx) call type_vehicle()

可以使用 call 命令显式调用函数;或通过求包含函数调用的表达式的值或使用 stop in glyph -if animate() 之类的条件修饰符来隐式调用函数。

C++ 虚拟函数与其他函数一样,可以使用 print 命令或 call 命令(请参print 命令call 命令)或任何其他执行函数调用的命令进行调用。

如果定义函数的源文件已使用 –g 选项编译,或原型声明在当前作用域可见,dbx 会检查参数的个数和类型,如果存在不匹配便发出错误消息。否则, dbx 不会检查参数的个数并继续执行调用。

缺省情况下,在每个 call 命令之后,dbx 都会自动调用 fflush(stdout) 来确保 I/O 缓冲区内存储的所有信息全部被打印。要关闭自动刷新,请将 dbx 环境变量 output_auto_flush 设置为 off

对 C++ 而言,dbx 可处理隐式 this 指针、缺省参数和函数重载。如有可能,C++ 重载函数将自动求解。如果存在任何二义性(例如,未使用 -g 编译函数),dbx 将显示重载名称列表。

使用 call 命令时,dbx 的行为就好像您使用了 next 命令一样(从被调用的函数返回)。但是,如果程序在被调用的函数内遇到断点,dbx 将在断点处停止程序并发出消息。如果现在键入 where 命令,栈跟踪将显示调用源自 dbx 命令级。

如果继续执行,调用会正常返回。如果尝试中止、运行、重新运行或调试,当 dbx 试图从嵌套中恢复时,命令便会终止。然后,可以重新发出命令。另外,可以使用 pop -c 命令弹出最近调用之前的所有帧。