在qemu平台使用gdb调试程序

2023-12-16 19:37:23

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常用指令

在这里插入图片描述

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”模式

文章来源:https://blog.csdn.net/weixin_42031299/article/details/135028500
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。