VSCode + gdb + gdbserver调试ARM程序

2023-12-06 04:36

本文主要是介绍VSCode + gdb + gdbserver调试ARM程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在开发ARM嵌入式端C/C++程序时,一般会在PC上编写代码,在Linux服务器上编译,然后将程序复制或挂载到ARM开发板上运行。如果程序出了问题,在不使用gdb的情况下,经常在代码中添加打印,编译,然后在开发板上再次运行,查看结果。添加打印、编译麻烦费时不谈,想要监视局部变量、断点执行这种方式还不支持。而使用gdb工具时,习惯了使用UI界面的人来说,基本上很难适应。这里将使用VS Code,结合gdb与gdbserver,可视化远程调试arm开发板上的linux C/C++程序。

当然,如果你的应用程序是直接在Linux x86上编译的,且非交叉编译,那么直接在Linux x86上运行即可,无需用gdbserver启动,也无需配置,点击左栏的debug图标即可编译并进入调试模式。
在这里插入图片描述

准备工作

交叉编译好的gdbserver与目标程序test。

使用交叉编译工具链编译要调试的程序,需要注意的是去掉编译选项中的"-O2"或"-O1"选项(某些代码被优化了之后,断点无法生效),并加上"-g"选项,在生成的可执行程序中包含调试信息。

开始调试

将编译好的gdbserver与生成的被调试程序test复制到目标主机中,

进入目标主机,运行如下命令。如果程序带有运行参数,直接依次写在test后面。

./gdbserver localhost:6767 test

端口号可以随意指定,后面填写vscode的配置需要用到,记录下目标主机的ip地址,后面填写配置也要用到。

在打开测试程序源代码工程的VS code窗口中,新建一个launch.json配置。如果已经有了launch.json配置,则直接打开,添加gdb调试配置。

img

img

在launch.json中修改program字段,填写生成的test文件路径。添加"miDebuggerPath"字段,填写刚刚编译生成的gdb路径。添加"miDebuggerServerAddress"字段,填写目标主机的IP与gdbserver监听的端口号。

![img](https://pic2.zhimg.com/80/v2-a0ec41e73856d7e3bf55dff3771fce49_720w.web

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb) Launch", //名称"type": "cppdbg","request": "launch","program": "${workspaceFolder}/xx/test", // 当前目录下编译后的可执行文件"args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}", //表示当前目录"environment": [],"externalConsole": false, // 在vscode自带的终端中运行,不打开外部终端"MIMode": "gdb", //用gdb来debug// "preLaunchTask": "build","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"miDebuggerServerAddress": "10.2.9.108:6767","miDebuggerPath": "/xx/aarch64-linux-gnu-gdb"}]
}

可以添加preLaunchTask,在启动调试前启动其他前置task,例如完成编译。嵌入式的编译往往是多样的,需要自己定义编译task,vscode的默认编译行为可能无法满足。

在文件中打上断点,监视窗口中添加想要监视的变量值,点击运行按钮,即可开始调试过程。

img

这篇关于VSCode + gdb + gdbserver调试ARM程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/460454

相关文章

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

使用C/C++调用libcurl调试消息的方式

《使用C/C++调用libcurl调试消息的方式》在使用C/C++调用libcurl进行HTTP请求时,有时我们需要查看请求的/应答消息的内容(包括请求头和请求体)以方便调试,libcurl提供了多种... 目录1. libcurl 调试工具简介2. 输出请求消息使用 CURLOPT_VERBOSE使用 C

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听