追踪功能用于调试仿真挂起,且无需检测内核代码,也无需使用 gdb
。对于外部测试激励文件,追踪功能不可用。存在两个使用模型。
第一个使用模型适用于独立 x86 仿真,无外部测试激励文件并启用 --stop-on-deadlock
。当 x86 仿真器检测到死锁时,它会打印一条消息,指明设计发生死锁,仿真将终止,并建议在启用追踪选项的情况下重新运行仿真。在此第二次仿真中,仿真器会给仿真期间发生的事件生成文本报告。学习此报告有助于您识别死锁的根本原因。根本原因可能只是仿真平台的数据文件中的输入数据不足或者可以增加参与的输入数据。
第二个使用模型适用于已启用 --trace
和 --timeout=secs
选项的仿真。超时到期后,仿真器会终止并生成追踪报告。正如第一个使用模型,分析追踪报告有助于识别死锁的根本原因。
其中包含如下选项:
-
--trace
用于在仿真结束时获取完整追踪报告。 -
--trace-print
用于在仿真运行期间,在控制台上显示输出。
追踪报告内容
追踪报告可显示在 x86 仿真器中进行设计仿真期间,所发生的一连串事件。生成的文件名为 x86simulator_output/trace/x86sim_event_trace.data.txt
。记录的事件类型包括:
- 内核迭代开始
- 内核迭代结束
- 串流停滞开始,即,从由于缺乏数据而发生阻塞的内核串流端口开始读取
- 串流停滞结束,即,初始存在阻塞、最后返回的串流端口中的读取点
- 锁定停滞开始,即,开始尝试获取窗口端口,此端口中锁定初始不可用
- 锁定停滞结束,即,对初始存在阻塞、最后返回的窗口端口尝试执行获取的时间点
--trace-print 与 --trace 的输出对比
--trace-print
的输出的精细程度不及 --trace
生成的文件。如果要快速查看仿真中发生的情况,或者如果计划通过 CTRL-C
代替 --timeout=secs
来终止仿真,请使用 --trace-print
。如果您的仿真不终止(死锁或分段错误),并且您不想指定 --timeout=secs
或 --stop-on-deadlock
,那么也适用该选项
--trace-print
的输出列包含以下信息。
- 时间戳:与
x86sim_event_trace.data.txt
相同。 - 内核的内部名称(
x86sim_event_trace.data.txt
使用用户名)。 - 事件类型。
- 数字值,其意义取决于事件类型:它会对您正在等待锁定或串流停滞的端口进行编码。它会对迭代事件开始的迭代次数进行编码。