在qemu平台使用gdb调试程序

1、使用gdb在qemu上调试程序

1.1、第一步:在qemu上运行程序并开启gdb server

在这里插入图片描述

  • qemu-system-riscv64 -nographic -machine virt -m 128M -smp 1 -kernel …/bin/test.elf -s -S

1.2、第二步:使用gdb客户端连接gdb server

在这里插入图片描述

-x:指定gdb的配置文件,这个不是必须的。使用配置文件可以提高调试效率,将每次开始gdb调试都需要输入的命令,提前写到配置文件中。

配置文件实现的效果和在命令行手动敲命令是一样的。

2、使用TUI模式调试

在这里插入图片描述

命令功能
layout src显示源码窗口
layout asm显示汇编窗口
layout regs在之前的窗口上再显示寄存器窗口
layout split同时显示源码、汇编窗口
layout next显示下一个layout
layout prev显示上一个layout

3、快捷方式

  • ctrl键 + n:下一条命令(功能和在linux命令行使用“下键”来查看之前输入过的命令)

  • ctrl键 + p:上一条命令(功能和在linux命令行使用“上键”来查看之前输入过的命令)

  • 切换焦点:

    • focus next:切换到下一个显示窗口(切换焦点,也就是可以通过“上下键”来翻看窗口代码)
    • focus prev:切换到上一个显示窗口(切换焦点,也就是可以通过“上下键”来翻看窗口代码)
    • 总结:focus next和focus prev是同时显示两个窗口时使用
  • 查看窗口源码的快捷键:

    • PGUP键:向上翻页
    • PGDN键:向下翻页
    • 上键和下键:上下滑动查看源码
  • shell + linux命令:在gdb命令行使用linux命令

4、gdb常用指令

在这里插入图片描述

  • 查看寄存器的命令:i r 寄存器名字
    • 比如:i r mcause

5、断点设置指令

break:设置断点,简写b
	b func              断点函数
	b file:linenum   断点文件行号
	b *address       断点地址

enable/disable:使能/去使能断点
	en/dis  1         使能/去使能断点1
	en/dis             使能/去使能所有断点

delete:删除断点
	delete 1            删除断点1
	delete               删除所有断点

info breakpoints:显示所有断点信息

checkpoint:记录断点状态,用于恢复断点。不可用于多线程
	checkpoint
	restart 1
	
Info checkpoint:显示checkpoint信息

watch:跟踪变量值,当变量值发生变化时,暂停
	watch    a 局部变量,在跳出当前函数时会失败
	watch    *0x600af0
	
Info watchpoint:显示watchpoint信息

6、解决SecureCRT软件显示乱码

在这里插入图片描述
在这里插入图片描述

  • 显示乱码的原因是字符编码格式不匹配,SecureCRT软件字符编码默认是“Default”模式
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值