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

在 C++ 程序中设置多个断点

可以检查与对不同类成员的调用、对给定类任何成员的调用或对重载的顶级函数的调用有关的问题。可以将关键字 inmemberinclassinfunctioninobjectstopwhentrace 命令一起使用,在 C++ 代码中设置多个断点。

在不同类的成员函数中设置断点

要在特定成员函数的每个对象特定变体(成员函数名相同,类不同)中设置断点,请使用 stop inmember

例如,如果在几个不同的类中定义了函数 draw,要在每个函数中设置断点,请键入:


(dbx) stop inmember draw

有关指定 inmemberinmethod 事件的更多信息,请参见inmember function inmethod function

在类的所有成员函数中设置断点

要在特定类的所有成员函数中设置断点,请使用 stop inclass 命令。

缺省情况下,断点只插入类中定义的类成员函数中,而不会插入可能从基类继承的类成员函数中。如果还要在从基类继承的函数中插入断点,请指定 -recurse 选项。

要在类 shape 中定义的所有成员函数中设置断点,请键入:


(dbx) stop inclass shape

要在类 shape 中定义的所有成员函数中以及从该类继承的函数中设置断点,请键入:


(dbx) stop inclass shape -recurse

有关指定 inclass 事件的更多信息,请参见inclass classname [-recurse | -norecurse]stop 命令

由于 stop inclass 和其他断点选择可能会插入大量断点,因此应确保将 dbx 环境变量 step_events 设置为 on 以加快 stepnext 命令的执行速度(请参见效率方面的考虑)。

在非成员函数中设置多个断点

要在具有重载名称(名称相同、参数的类型或数量不同)的非成员函数中设置多个断点,请使用 stop infunction 命令。

例如,如果 C++ 程序定义了两个名为 sort() 的函数版本(一个传递 int 类型参数,另一个传递 float 类型参数),要在这两个函数中设置断点,请键入:


(dbx) stop infunction sort 

有关指定 infunction 事件的更多信息,请参见infunction function

在对象中设置断点

可以设置 In Object 断点来检查应用于特定对象实例的操作。

缺省情况下,在从对象调用时 In Object 断点会在对象的类(包括继承的类)的所有非静态成员函数中暂停程序执行。要只在对象的类而不在继承的类中定义的非静态成员函数中设置断点以暂停程序执行,请指定 -norecurse 选项。

要在对象 foo 的基类中定义的所有非静态成员函数中以及在对象 foo 的继承的类中定义的所有非静态成员函数中设置断点,请键入:


(dbx) stop inobject &foo

要在对象 foo 的类中定义的所有非静态成员函数中设置断点,但不在对象 foo 的继承的类中定义的所有非静态成员函数中设置断点,请键入:


(dbx) stop inobject &foo -norecurse

有关指定 inclass 事件的更多信息,请参见inobject object-expression [-recurse | -norecurse]stop 命令