trace 命令使您能够指定要为给定对象(类、实例或关键字)跟踪的主题。主题包括存在性、特性、方法和事件。您可以选择按一个主题跟踪所有对象、按所有主题跟踪一个对象或者在这两者之间任意进行跟踪。
在缺省情况下,跟踪器将跟踪所有的类和实例,并且不会跟踪系统项(例如调用堆栈和事件队列),就像您执行了以下命令:
trace #all all
缺省情况下,在动画中,不会对任何项进行跟踪,就像您执行了以下命令:
trace object nothing
trace <object> <interest-list>
对象
指定要跟踪的对象。这可以是下列其中一项:
interest-list
指定主题列表(使用逗号进行分隔)。兴趣列表确定要向您报告的对象信息。
可能的主题如下所示:
| existence | 构造函数 |
| 关系 | 析构函数 |
| 特性 | 超时 |
| 状态 | 参数 |
| controls | subclasses |
| 方法 | 线程 |
| 事件 |
关键字 all 和 nothing 分别表示所有这些主题以及没有任何主题。
在主题前面指定加号 (+) 或减号 (-) 表示对当前兴趣列表添加或除去主题。如果既没有 + 也没有 -,那么输入的主题将成为当前兴趣列表,从而替换先前选择的任何主题。
主题 existence 报告对象的存在情况。
主题 subclasses 将 trace 命令应用于一个类的所有子类。此主题仅与类对象相关。
可以使用在对象名之后列示的主题来设置或修改给定对象的兴趣列表。
示例 1
以下命令将 B[5] 的兴趣列表设置为关系:
trace B[5] relations
现在,跟踪器将在对象 B[5] 的关系每次被修改时显示消息。例如:
OMTracer B[5] item A[7] added to relation itsA
对于 B[5],将只显示与关系相关的消息。
示例 2
以下 trace 命令将 relations 添加到 B[5] 的兴趣列表中:
trace B[5] +relations
其他与 B[5] 相关的消息将根据兴趣列表在此主题添加命令发出前具有的值进行显示或不显示。
示例 3
以下 trace 命令从 B[5] 的兴趣列表中除去 relations:
trace B[5] -relations
此命令的效果是,不显示任何关于对象 B[5] 的关系的消息。其他与 B[5] 相关的消息将根据兴趣列表在此命令发出前具有的值进行显示或不显示。
要按主题获取消息的完整列表,请参阅跟踪器消息。
示例 4
如果兴趣列表中的所有主题都与 + 号或 - 号一起出现,那么将修改该对象的兴趣列表。例如,以下命令将 relations 主题添加到 B[5] 的兴趣列表并除去 states 主题:
trace B[5] +relations, -states
相反,以下命令将 B[5] 的兴趣列表设置为只包含 relations 和 states 主题:
trace B[5] relations, states
在使用 trace 命令时,请考虑下列特殊情况:
trace A +relations
在执行此命令后创建的类 A 新实例也会将 relations 添加到它们的兴趣列表中。
主题 subclasses 仅与类对象相关。它以递归方式将给定命令中的兴趣列表传播到所有子类。