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

记一次linux下的c++ arm程序调试

前言

windows下,我习惯用IDE来开发和调试,比如用vc或者qt,但是现在碰到了需要在linux下开发调试c++的任务,当然用qt也行。不过这次的新任务,是开发一个基于ARM架构的AI识别程序,大家都懂的,不能调试,碰到BUG就很痛苦,因此在完成任务后,特地记录一下这个过程,给自己一个备忘,也给需要的朋友一个参考,有不足之处还请多多指教。

调试环境准备

我选用了vscode作为代码编辑器,因为目的是开发一个后端服务,没有界面;安装了C++开发必备的一些插件,这里首推微软的C/C++ Extension Pack,还有一些其他的,这里就不写了,大家可以网上搜搜好用的,我这里主要是简洁起见;调试器选用的gdb。
好了,基本环境就这些,下面说一下整个结构:

  1. 在vmware里运行的ubuntu 18.04虚拟机
  2. 虚拟机安装了从AI盒子厂家下载的docker镜像(此镜像提供了编译AI程序必备的环境,例如交叉编译器以及挂载了瑞芯微的头文件和库文件的目录)
  3. 源代码(源代码放在docker镜像映射的本地目录下)
  4. AI盒子
  5. AI盒子里安装了gdb server
  6. 虚拟机里安装了gdb-multiarch

开始调试

  1. 编译DEBUG版程序
    注意,一定要编译DEBUG版程序,否则没有调试符号是无法正常调试的。编译好后,将程序发布到AI盒子上
  2. 配置VSCODE C++调试文件
    主要是要配置launch.json
{
    // 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}/build/main",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "miDebuggerPath": "gdb-multiarch",
            "miDebuggerServerAddress": "192.168.20.217:2000",
            "sourceFileMap": {
                "/opt/Desktop/workspace/yolov5_detect_C_demo": "${workspaceFolder}" // 映射容器内的路径到主机路径
            },
        }
    ]
}

重点配置说明

program:指向你的程序
cwd:程序运行路径
MIMode:使用 GDB 的 MI 模式
miDebuggerPath:调试器,可以使用绝对路径(由于是在本机安装的,所以直接用程序名也行)
miDebuggerServerAddress:gdb server 配置
**sourceFileMap**: (重点)源文件映射路径

关于sourceFileMap需要特别说一下,由于我的源码,是在docker的环境下编译的,因此调试信息里带的,是容器内的路径,所以需要映射一下,否则调试的时候,就只能找到主文件,而找不到其他路径下的源代码文件

准备好后,就可以开始调试了,首先启动gdb server(在AI盒子里运行)

gdbserver IP:PORT /your/app/path

解释

IP:PORT:让gdb server 在指定的IP和端口上监听
/your/app/path:指向你的应用程序

在这里插入图片描述

然后在VSCODE里启动DEBUG,控制台的输出窗口里会输出一些日志,需要等一会儿,因为一些调试信息是从AI盒子远程加载的,并且还与你的电脑性能有关,等一会儿后,在VSCODE里打上断点,即可开始你的调试了
在这里插入图片描述


http://www.kler.cn/a/508430.html

相关文章:

  • 从零搭建SpringBoot3+Vue3前后端分离项目基座,中小项目可用
  • XML在线格式化 - 加菲工具
  • Chrome谷歌浏览器如何能恢复到之前的旧版本
  • Vue.js组件开发-如何处理跨域请求
  • python爬虫爬取淘宝商品比价||淘宝商品详情API接口
  • Python基于Django的图像去雾算法研究和系统实现(附源码,文档说明)
  • c语言中单引号和双引号用法详解
  • cmake foreach 条件判断
  • SpringBoot Starter 通用接口加密组件(防篡改)+ RequestBodyAdvice和ResponseBodyAdvice原理
  • 商用车电子电气零部件电磁兼容条件和试验(8)—辐射抗干扰(ALSE)和便携式发射机抗干扰(HPT)
  • (01)STM32—GPIO
  • Django MySQL数据库配置完全指南
  • pytorch张量复制方法介绍
  • 自动化之Ansible
  • AUTOSAR通信篇 - PDU和收发数据
  • PMML和XML-标记语言异同
  • %.*s——C语言中printf 函数中的一种格式化输出方式
  • 介绍UDP协议
  • PCL 点云按时间进行渲染赋色【2025最新版】
  • 图像处理|闭运算
  • 2025.1.16——三、supersqli 绕过|堆叠注入|handler查询法|预编译绕过法|修改原查询法
  • 快慢指针:链表问题的利器
  • unity免费资源2025-1-17
  • Java合并多个List集合的方法
  • AUTOSAR从入门到精通专栏总目录
  • Linux手写FrameBuffer任意引脚驱动spi屏幕