因为需要分析基于RISC-V平台的指令执行情况,开启了Renode仿真器的dump功能和logger功能。Dump功能可以帮助我们借助辅助工具对指令执行情况和memory访问情况等进行可视化图形展示,具体在前面的文章已经介绍过:Renode使用:Metrics analyzer_牧羊女-CSDN博客

Dump功能虽然可以让我们直观地看到指令执行的总体趋势,但是画面上并不提供微观细节(暂时没有找到解析Dump file的工具),想要看到平台内部的执行细节,可以使用log功能。

1. 设置log level

目前Renode支持5个log level,分别为:

  • NOISY (-1)
  • DEBUG (0)
  • INFO (1)
  • WARNING (2)
  • ERROR (3)

Renode提供了非常灵活的配置策略,可对每个仿真对象分别配置log level,也可以对不同的日志记录器(控制台或log文件)分别配置不同的log level。

默认情况下,Renode输出DEBUG level以上的log信息,如果要对所有log打开NOISY输出,可通过执行下面语句实现:

(machine-0) logLevel -1

如果想要对特定的外设改变log level,例如将UART的log level设置为NOISY,则通过下面命令实现:

(machine-0) logLevel -1 sysbus.uart

如果想要查看当前的log level信息,输入命令logLevel即可:

2. 输出到log file

以上输出中,可以看到"Backend"一栏有"file"项,这是因为在仿真中启用了log file输出。Renode的log默认是输出在控制台的,但是对于需要长时间运行的仿真,打印到日志文件里面会更加方便后期分析。

可通过如下命令启用log file的输出:

(machine-0) logFile @some_file_name

其中,"@some_file_name"就是我们要输出的log file的文件名,含路径。需要注意的是,打开log file后,原本输出到控制台的log并不会中断,而是两者同时输出(开发过log功能的同学大概会记得multi-sink的概念),但控制台和file可以分别设置log策略,比如log level等等。

例如,我们要把log file的level设置为ERROR级别,则可执行如下语句:

(machine-0) logLevel 2 file

要在log file中设置uart输出级别为INFO,则命令如下:

(machine-0) logLevel 1 file sysbus.uart

3. 使能外设访问日志

除了以上的常规日志配置,Renode还提供了对特定外设的访问日志,可以输出对注册在系统总线上的所有外设的访问记录。

例如,以下命令可开启对UART的访问记录:

(machine-0) sysbus LogPeripheralAccess sysbus.uart

每当有数据访问,便会输出类似如下的记录:

14:32:28.6083 [INFO] uart: ReadByte from 0x0 (TransmitData), returned 0x0.

若要开启对所有外设的访问日志,可执行如下命令:

(machine-0) sysbus LogAllPeripheralsAccesses true

开启后,会打印所有外设访问信息。

4. 跟踪函数执行

Renode还提供了跟踪函数执行的机制,可通过如下语句开启:

(machine-0) sysbus.cpu LogFunctionNames True        //开启所有函数执行的记录(machine-0) sysbus.cpu LogFunctionNames True "xyz  abc"   //开启以"xyz"和"abc"为前缀的函数的记录

但似乎该功能设计并不够完善,只能输出函数名称及指令地址,并不能很直观地看到具体的指令类型。

Renode中Logger的使用相关推荐

  1. java中Logger.getLogger(Test.class)

    java中Logger.getLogger(Test.class) log4的使用方法: log4是具有日志记录功能,主要通过一个配置文件来对程序进行监测 有两种配置方式:一种程序配置,一种文件配置 ...

  2. java中logger关闭log_Log4J如何关闭Logger对象的IO流资源

    之前,在做一个项目时,客户要求在接口中对各个交易每天在monitor.trans.service三个目录下生成日志文件,monitor按日期生成文件碎片,trans每天按照日期生成一个目录,在该目录下 ...

  3. log4j中 logger 标签中additivity属性的用法

    转自:https://www.cnblogs.com/wiseblog/articles/5596633.html    谢谢! 将logger中的 additivity 属性配置为 false,则这 ...

  4. logback中logger的 additivity 属性

    additivity 的作用在于当前 logger 是否使用上级 logeer(一般是root logger)配置的 appender 进行输出. false:表示只用当前 logger 的 appe ...

  5. 万万没想到! logger.info() 还能导致线上故障?

    事故代码 直入主题,生产环境日志级别为warn,请看如下这行代码: LOGGER.info("the DTO info: {}", JSON.toJSONString(DTO)); ...

  6. .NET中使用NLog记录日志

    以前小编记录日志使用的是Log4Net,虽然好用但和NLog比起来稍显复杂.下面小编就和大伙分享一下NLog的使用方式. 引用NLog.Config 在使用NLog之前,我们要首先添加对NLog.Co ...

  7. python processpoolexector 释放内存_一起看看python 中日志异步发送到远程服务器

    在python中使用日志最常用的方式就是在控制台和文件中输出日志了,logging模块也很好的提供的相应的类,使用起来也非常方便,但是有时我们可能会有一些需求,如还需要将日志发送到远端,或者直接写入数 ...

  8. cmd中的进度如何捕捉到输出内容_python 中日志异步发送到远程服务器

    在python中使用日志最常用的方式就是在控制台和文件中输出日志了,logging模块也很好的提供的相应的类,使用起来也非常方便,但是有时我们可能会有一些需求,如还需要将日志发送到远端,或者直接写入数 ...

  9. 在Flutter中设置更好的Logging的指南

    今天,我们将研究可以极大减少应用程序调试时间的任务之一.一旦您习惯了在您的应用程序中以某种方式运行的日志,您将很快能够注意到为什么某些东西不起作用.您可以查看应用程序的流程,如果需要,还可以查看更多内 ...

最新文章

  1. 用Python数据分析告诉你:复联哪个英雄人气最高?
  2. 1.2.2一个数可以有多少种用连续素数之和表示POJ 2739
  3. Web前端技术分享:学习HTML和CSS的5大理由
  4. 浅谈jQuery的选择器
  5. c 结构体中的变长数组
  6. android init.d脚本,◇添加init.d脚本支持教程贴◇
  7. 玩游戏计算机丢失msvcp,Win10系统玩吃鸡提示游戏缺少msvcp140.dll的解决方法
  8. 双闭环可逆直流脉宽pwm调速系统设计及matlab仿真验证_,双闭环可逆直流脉宽PWM调速系统的设计最终版(手机版)...
  9. 你是《未来世界的幸存者》么?
  10. Egret引擎学习笔记
  11. java:输入小写字母转为大写字母
  12. Frequent values POJ - 3368(线段树)
  13. 服务器租用idc机房功能和配置介绍
  14. [Vuetify] 解决mainterialicon加载慢
  15. 主要是web开发和android开发 最好是选择一个方向先专一去学, 半瓶子醋什么都想学你会发现到最后什么都不会,或者比别人多花出了太多的精力 我曾经学java的时候好高骛远,因为当时老师是一个c+
  16. 【锐捷无线】瘦AP模式限速
  17. 安卓开发规范-必读版
  18. 微信统一服务消息-公众号消息
  19. 2022年PMP项目管理考试敏捷知识点(1)
  20. 视频无法输出?来一键安装InVideo插件

热门文章

  1. 疫情防控培训(含内容)PPT模板
  2. you-get视频下载
  3. 【安全知识分享】《关注消防 珍爱生命》消防安全主题教育课件(附下载)
  4. redis连接不上,两种解决方式
  5. 怎么做好微商?教你做一个能赚钱的微商
  6. javascript英语单词音节拆分_最新英语单词音节的划分法
  7. 关于java构造方法的描述_下列关于Java中类的构造方法的描述,正确的是()
  8. 西门子840d备份到u盘_西门子840D数控系统硬盘数据恢复法
  9. qt html自动换行,qt label 自动换行
  10. 学习python路中的小栗子(函数篇)