Oracle® Solaris Studio 12.4:使用 dbx 调试程序

退出打印视图

更新时间: 2015 年 1 月
 
 

调用函数

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

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

(dbx) call change_glyph(1,3)

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

(dbx) call type_vehicle()

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

您可以通过使用 print 命令或 call 命令或任何其他用于执行函数调用的命令来调用 C++ 虚拟函数,就像调用任何其他函数一样。

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

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

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

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

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