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

打印 C++ 指针

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

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

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

在这些命令中还可使用 -d+d 选项,用来切换 dbx 环境变量 output_derived_type 的缺省行为。

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