gem5学习(5):使用debug-flag调试gem5仿真Debugging gem5

目录

一、使用调试标识符--debug-flags

1、--debug-flags=DRAM

2、--debug-flags=Exec

3、输出所有调试信息

二、新增新的调试标识符--debug-flags

1、在SConscript文件中声明debug-flags

2、hello_object.cc中引入头文件

3、hello_object.cc中修改输出

4、rebuild gem5.debug

5、测试

三、除DPRINTF外的调试函数


官网教程:gem5: Debugging gem5

本来想直接写下一小节《Event-driven programming》,但为了按照官网教程顺序,趁着周末时间,额外多写一篇吧。

一、使用调试标识符--debug-flags

1、--debug-flags=DRAM

举个比较简单的例子:

build/X86/gem5.debug --debug-flags=DRAM configs/learning_gem5/part1/simple.py | head -n 50
  • 其中--debug-flags=DRAM是启用DRAM调试的标志,即输出和DRAM相关的调试信息,可能包括对内存访问的跟踪、缓存行的命中或者失效等。
  •  head -n 50 的目的是限制输出行数,以便只显示前 50 行的调试输出。

2、--debug-flags=Exec

build/X86/gem5.debug --debug-flags=Exec configs/learning_gem5/part1/simple.py | head -n 50

其中--debug-flags=Exec,将输出与执行(execution)相关的调试信息,如模拟 CPU 如何执行每条指令的详细信息、函数调用和返回的跟踪。

3、输出所有调试信息

build/X86/gem5.debug --debug-help

二、新增新的调试标识符--debug-flags

1、在SConscript文件中声明debug-flags

gem5学习(5):使用debug-flag调试gem5仿真Debugging gem5_第1张图片

在这里是声明了一个名为HelloFlag的调试标识符,其中DebugFlag()的第二个参数是对HelloFlag的解释说明。

2、hello_object.cc中引入头文件

在类的实现文件中导入刚刚声明的debug-flag的头文件。

#include "base/trace.hh"
#include "debug/HelloExample.hh"

3、hello_object.cc中修改输出

DPRINTF(HelloExample, "Created the hello object\n");

gem5学习(5):使用debug-flag调试gem5仿真Debugging gem5_第2张图片

4、rebuild gem5.debug

scons build/X86/gem5.debug

5、测试

build/X86/gem5.opt --debug-flags=HelloExample configs/learning_gem5/part2/run_hello.py

gem5学习(5):使用debug-flag调试gem5仿真Debugging gem5_第3张图片

【说明】:之所以我运行的是hello_goodbye.py,是因为我在进行下一小节学习时将这部分文件修改了(新增了goodbye类),这里只展示debug-flag的输出效果如图上。

三、除DPRINTF外的调试函数

其他调试函数的参考文档

gem5: base/trace.hh File Reference

  •  前面提到的:cppDDUMP、:cppDPRINTF 和 :cppDPRINTFR接受一个调试标志作为参数,该标志在代码中指示是否启用调试输出。这样,可以根据需要选择性地打印调试信息。
  • gem5 提供了一些类似的函数,它们不接受标志作为参数。这意味着,只要调试功能被启用,这些函数将始终打印输出,而无需考虑标志的设置。
  • 同时,为了使用这些调试函数,必须以 "opt" 或 "debug" 模式编译 gem5。其他模式将使用空占位符宏来替代这些函数。

你可能感兴趣的:(gem5学习,学习)