Linux VSCode和Debug相关的备忘

在使用Linux时,总是会遇到一些意想不到的困难。而且似乎无穷无尽。这里打算写一个笔记,以后逐步来完善。特别是:调试的技能,总是占程序员的主要部分。在设置可视化调试环境过程中,常会同样陷入困境,有时深感自己资质愚钝。

下面的问题,尽管网上会有许多方案,但我只会记录自己尝试发现有用的一种。并且描述其中的坑。

目录

编译和启动Qemu

VsCode的 sudo问题。

Why:要sudo不输入密码

What和场景

1.修改visudo

2.添加用户名权限

编译u-boot过程

利用qemu启动u-boot

如何kill 进程by name

如何利用vscode进行调试

如何手工GDB调试

启动qemu

sudo qemu-system-arm -M vexpress-a9 -m 256 -kernel ./u-boot -nographic -s -S手工调试

在ubuntu调试


编译和启动Qemu

VsCode的 sudo问题。

Why:要sudo不输入密码

VsCode调试时,python插件,的确有能力,接受sudo的同时,也输入用户名和密码。

但非常不幸的是,C++插件并没有这个能力。

如果你需要用root来启动Vscode,也是可以的,需要将配置的目录告诉它,总之很难使用,所以不这一段的话题,以后有机会再来描述,哪些时候用得着。比如,调试bash shell的时候。

What和场景

场景因为,C++插件不支持sudo输入密码的问题。

即应用场景是:ubuntu+非root普通用户启动vscode,但是需要sudo启对被调试对象的情况。

所以,实现的要求是(what):要求操作系统,对当前用户, sudo时不需要输入密码。

【解决】,这个问题的答案在网上很多,例如:Linux设置sudo无需密码【Ubuntu、多种方法】_linux设置sudo免密-CSDN博客

之所以要写出来,是因为我在操作时,漏看了一句话:

放在最后面。

具体:

1.修改visudo

sudo visudo

2.添加用户名权限

进入页面后可使用ctrl + end下滑至底部
添加以下命令,xxx为你的用户名

xxx ALL=(ALL) NOPASSWD: ALL

这里的问题是我没有看到这句话:

进入页面后可使用ctrl + end下滑至底部

所以,写在了中间。结果就没有生效!

【坑】要写在最后!

编译u-boot过程

  sudo apt-get install build-essential pkg-config zlib1g-dev libglib2.0-0 libglib2.0-dev  libsdl1.2-dev libpixman-1-dev libfdt-dev autoconf automake libtool librbd-dev libaio-dev flex bison -y

sudo apt-get install gcc-arm-linux-gnueabihf

#交叉编译链 安装
sudo apt-get install gcc-arm-linux-gnueabihf
sudo apt-get install g++-arm-linux-gnueabihf

sudo apt install qemu-system-arm

qemu-system-arm -M help

git clone https://gitlab.denx.de/u-boot/u-boot

sudo make vexpress_ca9x4_defconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
 make clean && make vexpress_ca9x4_defconfig
 make -j$(nproc)

【坑】这个过程,其实坑也不少。最困难是

/usr/bin/arm-none-eabi-gdb

并不容易被装上。这个以后我再补充,有两种方案,一种是自己下2019 q4源码包,编译;

另一种是装gdb-multi,然后软链接。均可。

利用qemu启动u-boot

sudo qemu-system-arm -M vexpress-a9 -m 256 -kernel ./u-boot -nographic

必须要用sudo。

如果需要单步跟踪,需要启动qemu自带gdbserver, 作为stub

sudo qemu-system-arm -M vexpress-a9 -m 256 -kernel ./u-boot -nographic -s -S

第一个小s是启动gdbserver on port :1234 ; 大S是表示启动后,自动停止qemu(qemu在这里相当于CPU)。

单步模式,如果正常启动,程序不会有任何输出。

必须要用sudo。如果不用root权限,则可能会报声卡无法加载的错误。

尽管,网上有方案,认为qemu可以不用root权限启动,但我没有试成功。

【坑】一定要用sudo

如何kill 进程by name

ps -ef | grep qemu | grep -v grep | awk '{print $2}' | xargs sudo kill -9

如何利用vscode进行调试

简要说明:我们的目标,在是一台windows10的机器上,远程跟踪ubuntu上的u-boot程序。

这里我们先剧透一下:第一步是在ubuntu进行单机的qemu调试(实际是双机:实机+Qeum,连接by gdb stub);第二步是在远程,通过SSH进行调试。

为什么说剧透呢?因为习惯了gdbclient + gdb stub +gdb server思维模式后,这里需要转个弯。因为vscode并没有用这种模式,进行三机调试,而是在ubuntu上,装了一个Remote vscode server.

这是一种新认知。而且还不错。这种创新,带来一些意想不到的问题和方便。

如何手工GDB调试

启动qemu

sudo qemu-system-arm -M vexpress-a9 -m 256 -kernel ./u-boot -nographic -s -S
手工调试

arm-none-eabi-gdb u-boot

target remote localhost:1234

先启动gdb,然后等gdb的输出,出现后,再输入:target remote localhost:1234

注意:都要在工作目录执行,即u-boot所在的目录。

另外,应先安装gcc-arm-none-eabi。

sudo apt install gcc-arm-none-eabi gdb-multiarch

如果装上,还是没有,要么下代码自己编译,要么将软链接到/usr/bin/arm-none-eabi-gdb

在ubuntu调试

如前所述,windows三机调试(win-->ubuntu-->qemu)的模式,被vscode简化来类似远程桌面一样的架构,也就是说,只要配置好ubuntu 的debug环境,即能够实现远程调试。

所以,目前最重要的要点,就是如何配置launch.json

我们这里尽量暂时不上图了,以后补上,因为这方面的信息,网上很多。我们只把lanch.json 的内容放在这里:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "uboot-debug",
            "type": "cppdbg",
            "request": "launch",
            "miDebuggerServerAddress": "127.0.0.1:1234",
            "miDebuggerPath": "/usr/bin/arm-none-eabi-gdb",
            "program": "${workspaceFolder}/u-boot",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "logging": {
                "engineLogging": false
            },
            "MIMode": "gdb"
        }
    ]
}

参见:VSCode gdb 调试 qemu u-boot 的方法详解_相关技巧_脚本之家这篇文章主要介绍了VSCode gdb 调试 qemu u-boot 的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下icon-default.png?t=N7T8https://www.jb51.net/program/2903513gi.htm

虽然这里每一句都很重要,但最明显的是:

"miDebuggerServerAddress": "127.0.0.1:1234",

1234是qemu以-s参数启动时,开的gdb server的占用的端口。

然后我们手工启动qemu:

sudo qemu-system-arm -M vexpress-a9 -m 256 -kernel ./u-boot -nographic -s -S

就可以F5调试了。利用gdb命令行的方式的调试,以后补上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/677618.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智汇云舟与芯瞳完成兼容适配,共建国产化生态体系

近日,智汇云舟的视频孪生系列产品和时空大数据系列产品已完成与芯瞳半导体技术(山东)有限公司GPU产品GB2062/GB2064/CQ2040/CQ2040 MXM/CQ2040 MD的相互兼容性测试认证。双方产品经过严格测试,已完成兼容适配,具备良好…

数据挖掘综合案例-家用热水器用户行为分析与事件识别

文章目录 1. 背景与挖掘目标2. 分析方法与过程3. 数据分析3.1 数据探索分析3. 2 数据预处理1. 属性约束2. 划分用水事件3. 确定单次用水事件时长阈值4. 属性构造5.筛选候选洗浴事件 3.3 模型构建3.4 模型检验 4. 思考总结 1. 背景与挖掘目标 随着国内大家电品牌的进入和国外品…

260只出现一次的数字

一&#xff1a;题目描述 二&#xff1a;思路讲解 三&#xff1a;代码 class Solution { public:vector<int> singleNumber(vector<int>& nums) {int sum 0;for(const int& e : nums){sum ^ e;}int l (sum INT_MIN ? sum : sum&(-sum));int sum1 0…

解决 DBeaver 查询时不刷新数据,需要重新连接才会刷新,有缓存一样

DBeaver 查询时总是第一次有数据&#xff0c;再次执行查询数据不会刷新&#xff0c;像是有缓存一样&#xff0c;需要重新连接再查询才会刷新&#xff0c;知道肯定是哪里设置的不对&#xff0c;但是一直没找到&#xff0c;实在是重连太烦了&#xff0c;多次尝试终于找到了设置。…

智享直播(三代)2024年:打造24/7实景无人直播,引领年轻资产创业新纪元!

在21世纪的数字化浪潮中&#xff0c;直播行业以其独特的魅力和无限的可能性&#xff0c;正在全球范围内掀起一场前所未有的( keJ0277 )创业革命。而在这场革命中&#xff0c;智享直播&#xff08;三代&#xff09;以其创新的技术理念和前瞻的战略布局&#xff0c;立志于2024年打…

【AIoT-Robot】3d hand pose

手语是聋哑人士的主要沟通工具,它是利用手部和身体的动作来传达意义。虽然手语帮助它的使用者之间互相沟通,但聋哑人士与一般人的沟通却十分困难,这个沟通障碍是源于大部分人不懂得手语。 1. 手势&&手语 手势:手的姿势 ,通常称作手势。它指的是人在运用手臂时,所…

激光、超声波、霍尔、DS18B20 温度、模拟温度传感器 | 配合Arduino使用案例

激光传感器 用来发出红色激光。 /****** Arduino 接线 注意哈&#xff0c;这里直接两根***** Arduino 传感器* VCC 5v* GND A0 ***********************/ int pin A0; void setup() { Serial.begin(9600); // 串口通信用于输出 log pinMode(pin, OUTPUT)…

振弦采集仪在岩土工程基坑监测中的实用性与效果评估

振弦采集仪在岩土工程基坑监测中的实用性与效果评估 振弦采集仪是一种基坑监测中常用的测量仪器&#xff0c;通过测量土体振动参数&#xff0c;可以评估基坑振动对周围环境和结构的影响。本文将从实用性和效果两方面评估振弦采集仪在岩土工程基坑监测中的应用。 一&#xff0c…

AC 800PEC 高性能控制系统GFD563A101 3BHE046836R0101

AC 800PEC 控制系统对于大功率整流器应用具有极快控制算法的高性能应用 –快速控制的周期时间范围为100 μs(微秒) 长期操作瞬变的循环至秒-要求专用控制设备。这就是为什么我们设计了AC 800PEC&#xff0c;扩展ABB著名的自动化技术来处理高速电力电子等过程的算法应用程序。 …

迅雷极简易下载

一、简介 1、迅雷是一家全球领先的去中心化服务商&#xff0c;以技术构建商业&#xff0c;以服务创造共识&#xff0c;从而建立一个高效可信的存储与传输网络。 迅雷成立于2003年&#xff0c;总部位于中国深圳&#xff0c;2014年于纳斯达克上市&#xff08;纳斯达克股票代码&a…

AI图片光影重塑 - IC Light独立安装

两个前提&#xff1a; 1.安装GIT &#xff08;https://blog.csdn.net/qq_42372031/article/details/130676236&#xff09; 2.安装ANACONDA&#xff08;https://blog.csdn.net/ViatorSun/article/details/118578818&#xff09; 来到IC-Light主页&#xff08;https://github.…

Java面试八股之Executors可以创建哪几种类型的线程池

Executors可以创建哪几种类型的线程池 newSingleThreadExecutor&#xff1a; 创建一个单线程的线程池&#xff0c;此线程池确保所有的任务都在同一个线程中按顺序执行。适用于需要保证任务顺序执行&#xff0c;或者在单线程中运行的任务。 newFixedThreadPool&#xff1a; …

这样的手机主题,我真的可以玩一天

作为一个“手机控”&#xff0c;我对手机的主题和界面总是有着特别的追求。每次换个新主题和弹窗&#xff0c;都像是给手机穿上了一件新衣服&#xff0c;心情都跟着愉悦起来。而这次&#xff0c;华为HarmonyOS 4.2 上新的互动主题&#xff0c;真的是够好玩够懂我&#xff01; 手…

OpenCV中的圆形标靶检测——斑点检测算法(二)

前面的章节中我们已经大致介绍了算法流程,也对一些算法中用到的相关概念做了简要介绍,同时给出了算法调用的API,现在我们开始算法检测接口实现源码的分析。 1. 斑点的分组与加权 这里我们选择后者,先了解算法的处理流程,再分析各个模块的实现。算法流程图如下图所示,上一…

跟着AI学AI_01,语音识别框架

按&#xff1a;本人开始学习AI了&#xff0c;怎么利用现有的AI开始进行自启发式的学习也是使用AI的一种方式吧。跟着AI学习AI的系列基本上是与ChatGPT或者其他AI产品的对话实录&#xff0c;为了方便特地记录一下。 AI&#xff1a;GPT4o&#xff0c;下面是回答原文拷贝 环境准备…

【SVG 生成系列论文(九)】如何通过文本生成 svg logo?IconShop 模型推理代码详解

SVG 生成系列论文&#xff08;一&#xff09; 和 SVG 生成系列论文&#xff08;二&#xff09; 分别介绍了 StarVector 的大致背景和详细的模型细节。SVG 生成系列论文&#xff08;三&#xff09;和 SVG 生成系列论文&#xff08;四&#xff09;则分别介绍实验、数据集和数据增…

生成式人工智能时代:职业任务的转型与技能需求的演变

近年来&#xff0c;人工智能的发展已经从决策式时代迈入了生成式时代。这一转变不仅改变了现有职业的性质&#xff0c;也催生了众多新兴职业。在这个过程中&#xff0c;劳动者所需具备的技能也在不断演变。本文将探讨生成式人工智能对职业任务的影响&#xff0c;以及劳动者在新…

[C/C++]_[初级]_[在Windows和macOS平台上导出动态库的一些思考]

场景 最近看了《COM本质论》里关于如何设计基于抽象基类作为二进制接口,把编译器和链接器的实现隐藏在这个二进制接口中,从而使用该DLL时不需要重新编译。在编译出C接口时,发现接口名直接是函数名,比如BindNativePort,怎么不是_BindNativePort?说明 VC++导出的函数默认是使…

mac电脑多协议远程管理软件:Termius 8.4.0激活版下载

Termius 是一款功能强大的跨平台远程访问工具&#xff0c;可用于管理和连接各种远程系统和服务器。它支持SSH、Telnet、SFTP和Serial协议&#xff0c;并提供了键盘快捷键、自动完成和多标签功能&#xff0c;使用户可以方便地控制和操作远程主机。 Termius 提供了端到端的加密保…

风电Weibull+随机出力!利用ARMA模型随机生成风速+风速Weibull分布程序代码!

前言 随着能源问题日益突出&#xff0c;风力发电等以可再生能源为基础的发电技术越来越受到关注。建立能够正确反映实际风速特性的风速模型是研究风力发电系统控制策略以及并网运行特性的重要基础叫。由于风速的随机性和波动性&#xff0c;系统中的机械设备和电气设备以及电网…