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命令行的方式的调试,以后补上。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小猪APP分发:如何轻松进行在线封装APP

你是否曾经因为需要封装一个新版本的APP而感到头疼?传统的封装过程往往繁琐且耗时。但是,别担心,现在有了“小猪APP分发”,一切变得如此简单。 小猪APP分发www.appzhu.net是一个专门提供在线APP封装服务的平台。无论你是开发者还…

Assignement5: Multi-threaded Producer Consumer Pipeline

Assignement5: Multi-threaded Producer Consumer Pipeline. 一起来打卡学习!

NetApp 面向医疗保健行业的解决方案

NetApp 面向医疗保健行业的解决方案 旨在为您提供令人惊叹的临床应用程序性能,并通过内置的安全性和监控功能,由无中断的运营连续性提供支持。 为护理而设计 对于专注于整个医疗保健产业链(包括提供商、付款方、生命科学)的创新能…

跟着AI学AI_02, 时域频域和MFCC

AI:ChatGPT4o 时域和频域是信号处理中的两个基本概念,用于描述信号的不同特性。 时域 时域(Time Domain) 是对信号随时间变化的描述。在时域中,信号是作为时间的函数来表示的。 时域表示:例如&#xff0…

【热点】老黄粉碎摩尔定律被,量产Blackwell解决ChatGPT耗电难题

6月3日,老黄又高调向全世界秀了一把:已经量产的Blackwell,8年内将把1.8万亿参数GPT-4的训练能耗狂砍到1/350; 英伟达惊人的产品迭代,直接原地冲破摩尔定律;Blackwell的后三代路线图,也一口气被…

【康耐视国产案例】智能AI相机联合OSARO为Zenni眼镜实现订单履约自动化

在电商潮流下,Zenni眼镜作为全球领先的在线眼镜零售商,每年销售超过600万副眼镜,却面临着一个独特而复杂的问题——需要通过扫描眼镜盒内的条形码来处理订单。传统手动处理已经到达流程瓶颈,急需一种更加自动化、可扩展的方法。为…

Pikachu靶场下载、配置

目录 下载 配置 新版小蓝皮 搭建网站 搭建数据库 初始化靶场 旧版小绿皮 配置数据库 配置网站 下载 GitHub下载地址: 百度网盘:https://pan.baidu.com/s/1j2WpdLvwAbmpAH76d_yitw?pwdwf8j 提取码:wf8j 迅雷链接:http…

【STL深入浅出】之从零到精通:vector使用与模拟

📃博客主页: 小镇敲码人 💚代码仓库,欢迎访问 🚀 欢迎关注:👍点赞 👂🏽留言 😍收藏 🌏 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧…

thinkphp6 queue队列的maxTries自定义

前景需求:在我们用队列的时候发现maxtries的个数时255次,这个太影响其他队列任务 我目前使用的thinkphp版本是6.1 第一部定义一个新的类 CustomDataBase(我用的mysql数据库存放的队列) 重写__make 和createPlainPayload方法 …

每日两题 / 34. 在排序数组中查找元素的第一个和最后一个位置 33. 搜索旋转排序数组(LeetCode热题100)

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 根据二分函数&#xff0c;得到>target和<target的两个&#xff0c;分别是答案的l和r class Solution { public:vector<int> searchRange(vector<int>& nums,…

【Uniapp小程序】自定义导航栏uni-nav-bar滚动渐变色

效果图 新建activityScrollTop.js作为mixins export default {data() {return {navBgColor: "rgba(0,0,0,0)", // 初始背景颜色为完全透明navTextColor: "rgba(0,0,0,1)", // 初始文字颜色};},onPageScroll(e) {// 设置背景const newAlpha Math.min((e.s…

小学数学出题器-Word插件-大珩助手

Word大珩助手是一款功能丰富的Office Word插件&#xff0c;旨在提高用户在处理文档时的效率。它具有多种实用的功能&#xff0c;能够帮助用户轻松修改、优化和管理Word文件&#xff0c;从而打造出专业而精美的文档。 【新功能】小学数学出题器 1、实现了难度设定&#xff1b;…

HCIP-Datacom-ARST自选题库__MAC【14道题】

一、单选题 1.缺省情况下&#xff0c;以下哪种安全MAC地址类型在设备重启后表项会丢失? 黑洞MAC地址 Sticky MAC地址 安全动态MAC地址 安全静态MAC地址 2.华为交换机MAC地址表中的动态sticky MAC地址的默认老化时间是多少秒? 300 不会老化 400 500 3.华为交换机MA…

Golang | Leetcode Golang题解之第129题求根节点到叶节点数字之和

题目&#xff1a; 题解&#xff1a; type pair struct {node *TreeNodenum int }func sumNumbers(root *TreeNode) (sum int) {if root nil {return}queue : []pair{{root, root.Val}}for len(queue) > 0 {p : queue[0]queue queue[1:]left, right, num : p.node.Left, …

大规模 Transformer 模型 8 比特矩阵乘

本文基于 Hugging Face Transformers、Accelerate 以及 bitsandbytes库。 Transformers&#xff1a;Hugging Face 提供的一个开源库&#xff0c;包含了多种预训练的 Transformer 模型&#xff0c;方便用户进行各种 NLP 任务。Accelerate&#xff1a;Hugging Face 开发的一个库…

大型语言模型的工作原理(LLM:从零学起)

目录 一、说明 二、LLM如何运作 三、预训练&#xff1a;基本模型 四、微调&#xff1a;培训助手 五、RLHF&#xff1a;从人类反馈中强化学习 六、提示工程 七、总结 一、说明 这是我们谈论LLM系列的第二篇文章。在本文中&#xff0c;我们旨在为大型语言模型 &#xff08;LLM&am…

Java开发:Spring Boot 实战教程

序言 随着技术的快速发展和数字化转型的深入推进&#xff0c;软件开发领域迎来了前所未有的变革。在众多开发框架中&#xff0c;Spring Boot凭借其“约定大于配置”的核心理念和快速开发的能力&#xff0c;迅速崭露头角&#xff0c;成为当今企业级应用开发的首选框架之一。 《…

Linux运维应知必会的LVS高可用负载均衡方案

背景 在业务量达到一定量的时候&#xff0c;往往单机的服务是会出现瓶颈的。此时最常见的方式就是通过负载均衡来进行横向扩展。其中我们最常用的软件就是 Nginx。通过其反向代理的能力能够轻松实现负载均衡&#xff0c;当有服务出现异常&#xff0c;也能够自动剔除。但是负载…

PromptIR论文阅读笔记

MZUAI和IIAI在NIPS2023上的一篇论文&#xff0c;用prompt来编码degradation&#xff0c;然后用来guide restoration network&#xff0c;使得模型能够泛化到不同degradation types and levels&#xff0c;也就是说是一个模型一次训练能够应对多种degradation的unified model。文…

生成式AI,在云端的绽放与盛开

编辑&#xff1a;阿冒 设计&#xff1a;沐由 毫无疑问&#xff0c;生成式AI已然成为当今技术发展和应用创新的重要引擎之一。 过去的一年多时间里&#xff0c;我们每个人都在目睹和见证着生成式AI是如何以移山倒海的力量&#xff0c;为诸多行业带来革命性乃至颠覆性的变革&…