当前位置: 首页 > news >正文

qemu基础篇——VSCode 配置 GDB 调试

文章目录

  • VSCode 配置 GDB 调试
    • 安装 VSCode 插件
    • 调试文件创建
    • 调试配置
      • 配置脚本
      • qemu 启动脚
    • 启动调试
      • 报错情况一
      • 报错情况二
      • 报错情况三
    • 调试界面
    • 运行 GDB 命令
    • 查看反汇编
    • 断点
    • 查看内核寄存器
    • 查看变量
    • 参考链接

VSCode 配置 GDB 调试

qemu-基础篇——arm 裸机调试环境搭建
上一节中直接使用 GDB 命令行调试,本节介绍如何使用 VSCode 来进行调试

安装 VSCode 插件

在这里插入图片描述

调试文件创建

在这里插入图片描述
选择 Node.js,此时在当前工作区域会新建一个 launch.json 文件
在这里插入图片描述

调试配置

配置脚本

{"version": "0.2.0","configurations": [{"name": "qemu_bare","type": "cppdbg","request": "launch","program": "${workspaceFolder}/qemu_code/bare/example/0020_mmu/bsp.elf","args": [],"stopAtEntry": true,"cwd": "${workspaceFolder}/qemu_code/bare","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "/home/tyustli/cross_tool/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gdb","miDebuggerServerAddress": "localhost:1234",}]
}
  • version:表示版本号,一般不用修改
  • configurations:其中包含每一项调试任务的具体配置信息。
  • name:调试任务的名称,在运行和调试下拉框可以展示出来。也就是下图位置。
  • type:指示编译器类型,如果用的 arm-none-gcc,那填的就是 cppdgb
  • request:有两种类型,分别是 launch 和 attach,前者的意思就是 VSCode 会打开这个程序然后进入调试,后者的意思是你已经打开了程序,然后接通 Node.js 的内部调试协议进行调试。一般选 launch
  • args:传递给程序的命令行参数。比如可以是debug的输入文档,建议使用绝对路径。
  • stopAtEntry:可选参数。如果为 true,则调试程序应在目标程序的入口点处停止,如果为 false,不会在在目标程序的入口点处停止,而是直接运行直到遇到断点
  • cwd:cd 到工程的顶层目录。一般是指,所要调试的程序所在目录。
  • environment:要添加到程序中的环境变量{“name”:“config”,“value”:“Debug”}。
  • externalConsole:true:启动控制台;false:在vscode的集成的控制台显示
  • MIMode:调试方式,指定调试器是gdb,又或者lldb等等。
  • miDebuggerPath:设置调试器路径
  • miDebuggerServerAddress:用于远程调试连接的调试器服务器(设备)

qemu 启动脚

qemu-system-arm -machine mcimx6ul-evk -kernel bsp.elf -serial stdio -S -s

qemu 启动选项多了 -s -S ,表示启动之后就 stop 等待 GDB 连接,在启动调试之前先启动 qemu ,让其等待 GDB 连接

启动调试

在这里插入图片描述

报错情况一

如果找不到 Node.js 模块,使用如下命令安装
Node.js 安装

 sudo apt-get install nodejs

报错情况二

error while loading shared libraries: libncursesw.so.5: cannot open shared object file: No such file or directory

解决

sudo apt install libncursesw5-dev
sudo apt install apt-file
sudo apt-file update
sudo apt-file find libncursesw.so.5
sudo apt install libncursesw5

报错情况三

error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

解决

sudo apt-get install libpython2.7

调试界面

在这里插入图片描述

运行 GDB 命令

在调试控制台输入 -exec + GDB 命令 即可,例如
在这里插入图片描述

查看反汇编

在调试控制台输入

-exec disassemble /m

在这里插入图片描述

断点

在这里插入图片描述

查看内核寄存器

在这里插入图片描述

查看变量

参考链接

  • https://code.visualstudio.com/docs/editor/debugging#_launch-configurations

相关文章:

qemu基础篇——VSCode 配置 GDB 调试

文章目录 VSCode 配置 GDB 调试安装 VSCode 插件调试文件创建调试配置配置脚本qemu 启动脚 启动调试报错情况一报错情况二报错情况三 调试界面运行 GDB 命令查看反汇编断点查看内核寄存器查看变量参考链接 VSCode 配置 GDB 调试 qemu-基础篇——arm 裸机调试环境搭建 上一节中…...

Spark常用算子

转换算子 value类型 算子名称作用Map映射a->bflatMap扁平化[[a,b],[c,d]] -> [a,b,c,d] ,二维变一维groupBy分组[1,2,3,4] ->[[1,3],[2,4] ],一维变二维filter过滤[1,2,3,4] -> [2,4] 符合条件进入,不符合去掉distinct去重[1,1…...

day35

今日内容概要 Socket抽象层(socket编程) 基于TCP协议的借助socket可以编程客户端和服务端的程序 链接循环 通信循环 基于UDP协议的套接字(socket)编程 粘包现象 如何解决粘包现象(重要的是解决的思路) struct模块的使用(打包、解包) 今日内容详细 Socket抽象层&#x…...

js原型链以及实现继承的手段

1.原型链 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。 简单回顾一下构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。…...

jdk8u201版本cpu.load过高问题的排查和解决

文章目录 1、背景2、现象3、排查定位4、原因总结5、解决 1、背景 jdk8u45版本存在安全漏洞,性能问题。需要升级到8u201 2、现象 升级到201版本后,出现cpu.load过高 3、排查定位 使用压测工具压测时,cpu.load过高问题必现,确认…...

【计算机网络笔记】数据交换之报文交换和分组交换

系列文章目录报文交换分组交换存储-转发报文交换 vs 分组交换总结 系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 报文交换 报文:源(应用)发送的信息整体。比如一个文件、一…...

【广州华锐互动】利用VR开展细胞基础实验教学有什么好处?

在科技发展的驱动下,虚拟现实(VR)技术已被广泛应用于各个领域,包括教育和医学。尤其是在医学教育中,VR技术已成为一种革新传统教学模式的有效工具。本文将探讨使用VR进行细胞基础实验教学的优势。 首先,VR技…...

基于SSM+Vue的咖啡销售系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...

L2-026 小字辈

本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,…...

linux 查看系统版本

命令:lsb_release -a 可能遇到的问题: 问题1: 报错:command not found: lsb_release原因:系统没有安装 lsb_release解决方案:sudo apt-get install lsb-release 问题2: 报错: Tra…...

Python实现PDF转换文件格式

最近工作中经常遇到收到其他人提供的pdf文档,想要编辑修改下或者复制部分内容比较困难,想通过现有的pdf工具软件转换文档格式,基本都要充钱,为了免费实现pdf转换工具,网上查了下相关技术方案,整理了下代码&…...

【Ceph Cluster】完全删除Ceph集群

注意:在执行这些步骤之前,请确保你已经备份了所有重要的数据,并且你明白这些步骤将永久删除 Ceph 集群。 停止 Ceph 服务: systemctl stop ceph.target卸载 Ceph 包:卸载 Ceph 相关的软件包,使用你的 Linux…...

4.Vue-Vue调用第三方接口

题记 用vue调用第三方接口,以下是全部代码和操作流程。 寻找第三方接口网站 推荐:免费API - 提供免费接口调用平台 (aa1.cn) 下面的代码以下图中的接口为例 安装axios模块 在终端输入以下命令: npm install axios 调用第三方接口代码 调…...

大语言模型在推荐系统的实践应用

本文从应用视角出发,尝试把大语言模型中的一些长处放在推荐系统中。 01 背景和问题 传统的推荐模型网络参数效果较小(不包括embedding参数),训练和推理的时间、空间开销较小,也能充分利用用户-物品的协同信号。但是它的缺陷是只能利用数据…...

第三章 交换技术及应用

目录 3.1 port-vlan技术 3.1.1 VLAN概述 3.1.2 VLAN划分方法——Port-VLAN 3.1.3 Port-VLAN工作原理 3.1.3 Port-VLAN配置 3.2 port-vlan仿真演示 3.2.1 实验背景 3.2.2 实验目的 3.2.3 实验设备 3.2.4 实验步骤思维导图 3.3 tag-vlan技术 3.3.1 问题分析 3.3.2 T…...

地震勘探原理部分问题解答

1、二维/三维(陆地/海洋)地震勘探,炮点(激发点)和检波点(接收点)的排布位置如何?画图作答? (1)陆地地震勘探 二维陆地地震野外采集:震…...

两个步骤轻松搞定批量合并视频

你是否曾经有过批量合并视频的需求,但是却苦于不知道如何下手?今天,我将为你介绍一个简单易行的方法,只需两个步骤,让你轻松实现批量合并视频。 第一步:下载并打开固乔智剪软件 首先,你需要下载…...

VR虚拟现实在室内设计仿真教学中的应用演示

1. 虚拟实景漫游:利用VR技术,学生可以通过戴上VR头盔来进入一个虚拟的室内环境中,感受真实的空间氛围。他们可以自由移动和观察,感受室内设计的效果。这样的体验可以增强学生的想象力和空间感知能力,提高他们的设计水平…...

Python操作串口通信

Python操作串口通信 注意Linux下先要修改串口的权限: sudo chmod 777 /dev/ttyUSB0 以下是python代码: # codingutf-8 # 包:pyserial,pymysql # 权限:sudo chmod 777 /dev/ttyUSB0 import serial # import pymysql …...

图详解第四篇:单源最短路径--Dijkstra算法

文章目录 1. 最短路径问题2. 单源最短路径--Dijkstra算法算法思想图解如何存储路径及其权值代码实现调式观察打印最短路径Dijkstra算法的缺陷 3. 源码 1. 最短路径问题 最短路径问题: 从带权有向图(求最短路径通常是有向图)G中的某一顶点出发…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

python打卡day49

知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

Java入门学习详细版(一)

大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...