可以检查与对不同类成员的调用、对给定类任何成员的调用或对重载的顶级函数的调用有关的问题。可以将关键字(inmember、inclass、infunction 或 inobject)与 stop、when 或 trace 命令一起使用,在 C++ 代码中设置多个断点。
要在特定成员函数的每个对象特定变体(成员函数名相同,类不同)中设置断点,请使用 stop inmember。
例如,如果在几个不同的类中定义了函数 draw,要在每个函数中设置断点,请键入:
(dbx) stop inmember draw |
有关指定 inmember 或 inmethod 事件的更多信息,请参见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 以加快 step 和 next 命令的执行速度(请参见效率方面的考虑)。
要在具有重载名称(名称相同、参数的类型或数量不同)的非成员函数中设置多个断点,请使用 stop infunction 命令。
例如,如果 C++ 程序定义了两个名为 sort() 的函数版本(一个传递 int 类型参数,另一个传递 float 类型参数),要在这两个函数中设置断点,请键入:
(dbx) stop infunction sort [command;] |
有关指定 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 命令。