使用 Gem5

如何解决使用 Gem5

gem5 内置了对 GDB 远程调试器接口的支持。我想使用远程 gdb 和 Gem5(在 se 模式下)调试一个非常小的代码。

如下图所示,我要调试的程序(仅用于测试)有一个 scanf 语句来读取用户的值。但是,当我在 gdb(在主机上)中键入 cont 时,程序(在 Gem5 中的模拟机器上)不会在此语句处停止输入值。即使我在这条语句上设置了断点,gem5 上的程序也不会停止(使我能够输入 int 变量的值)并完成其工作。 正如我们从 gem5 的输出中看到的那样...... int 变量的值是随机分配的。 这里的真正问题是什么?是因为 scanf 声明吗?还是我做错了什么?! 如何与 Gem5 一起使用远程 gdb?

enter image description here

主机和模拟机都是x86(不需要跨gdb)

不管scanf,我有一个非常简单的程序,其中包含三个打印指令。我在第三条打印指令处设置了一个断点,host 和 Gem5 上的程序都在此时停止。当我在主机上 cont 程序时,它会继续正常工作,但在 gem5 上,程序卡住了,无法继续。

跨gdb

以上工作是使用 x86 作为主机和 x86-Gem5 进行的。现在我想测试跨gdb。在我的主机上,我安装了 Gem5 中使用 ARM 模拟机所需的所有交叉工具(gcc、g++ 和 gdb)。 我从主机启动 gdb 并输入以下命令:

gdb-multiarch
file arm_test // a sample code compiled using arm-gcc cross compiler
set architecture arm
set b main
target remote localhost:7000
c

当我在输入 c (cont) 后按 Enter 键时,Gem5 上的程序不会在 main 处停止(因为我在那里设置了断点)并且它完成了工作,打印了 hello world 并退出。 在 Gem5 上,我看到一条警告消息说:warn: Invalid breakpoint length

更新

我使用以下 GDB 标志来计算和检查从 Gem5 传输到(主机 gdb)的数据,反之亦然。

--debug-flag=GDBSend,GDBRecv,GDBMisc

如下图所示

enter image description here

当我在位于地址偏移量 (breakpoint) 的代码中的特定位置(比如函数调用)设置 1031e 时......一堆信息被发送到 Gem5,因为它是从图片中清除:

0: system.remote_gdb: recv:  m1031e,2 // receive
0: system.remote_gdb: send:  fff7    // send what ???
0: system.remote_gdb: recv:  Z0,1031e,3 // receive

我希望有人帮助我并解释“Z0,3”的真正含义是什么?我知道 gem5 已从(主机 gdb)接收到数据,该数据告诉它在位于偏移量 1031e 的指令处设置断点。但是这里的数字三是什么意思?

因为我认为这是问题的主要原因;当我在 (host gdb) 上点击 cont 时,gem5 端的程序永远不会停止并使用提到的警告消息完成它的工作:warn: Invalid breakpoint length

有效长度是多少?以及如何调整?

如果我在另一个位置设置了 bp(比如在 printf 指令的位置),我也会出错。

0: system.remote_gdb: set software breakpoint,addr=0x1030a,len=2
warn: Invalid breakpoint length

请提供任何帮助或建议!

  • Gem5 分支:稳定
  • 配置文件:se.py

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-