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

退出打印视图

更新时间: 2015 年 1 月
 
 

输出 C++ 指针

在 C++ 中,对象指针有两种类型:静态类型(在源代码中定义)和动态类型(对象进行类型转换之前的状况)。dbx 有时可以提供有关对象的动态类型的信息。

通常情况下,如果对象有虚拟函数表(即 vtable),dbx 便可使用 vtable 中的信息正确地确定对象的类型。

您可以将 print 命令、display 命令或 watch 命令与 -r(递归)选项结合使用。dbx 将显示通过类直接定义的所有数据成员以及从基类继承的所有数据成员。

这些命令还可采用 -d+d 选项,切换 dbxenv 变量 output_dynamic_type 的缺省行为。

使用 -d 标志或将 dbxenv 变量 output_dynamic_type 设置为 on 时,如果没有进程运行,则将生成 program is not active 错误消息。同样,当您正在调试信息转储文件时,如果没有进程,则无法访问动态信息。如果尝试通过虚拟继承来查找动态类型,将生成 illegal cast on class pointers 错误消息。在 C++ 中,从虚拟基类转换到派生类是非法的。