导航定位程序编译调试经验【1-20】

  • https://github.com/LiZhengXiao99/Navigation-Debug
  • 记录一些导航程序编译调试过程中遇到的问题,和我找到的解决方案,以后遇到啥问题了,都来记录一下;如果针对我提出的问题,您有更好的解决方案,欢迎评论分享。

001-单步调试 C++ 程序总是进入标准库函数

解决办法有两种:

  • 遇到标准库函数的语句,用单步跳过(逐过程),而不是单步执行,已经进入库函数了就单步跳出;

  • 改编译器配置,一劳永逸的解决问题

    • VS:改 default.natstepfilter 文件:

      C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Packages\Debugger\Visualizers\default.natstepfilter
      

      以管理员身份打开,并在 xml 格式中加入一行:

      <Function><Name>std::.*</Name><Action>NoStepInto</Action></Function>
      
    • VSCode:改每个项目的 Lunch.json 文件,在 “setupCommands” 里加上:

      {"description": "防止gdb打开标准库函数","text": "-interpreter-exec console \"skip -rfu std::.*\"","ignoreFailures": false
      }
      

      参见:避免vscode调试C++时进入标准库 | VScode调试C++不进入标准库的配置方法


002-Windows下编译链接的时候找不到 XXX 文件

  • 出现这个问题的原因有很多,可能是你确实没有这个文件,可能是没放在环境变量或者默认包含路径里,可能是头文件写的包含路径不对;

  • 还有一个可能的原因是因为没开管理员权限,我用 Arduino、Qt Creater、Keil 的时候都遇到过这种问题;可以右击软件图表,选择【属性】,在【兼容性】选项卡中,勾选【以管理员身份运行此程序】;设置成功之后,软件图标右下角应该会显示一个盾牌,之后每次打开直接就有管理员权限。


003-Qt 在线安装下载速度太慢

  • 如果是 Qt 5.15 以前的版本,可以下载离线安装包:

    • 中国科学技术大学:http://mirrors.ustc.edu.cn/qtproject/
    • 清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/
    • 北京理工大学:http://mirror.bit.edu.cn/qtproject/
    • 中国互联网络信息中心:http://mirror.bit.edu.cn/qtproject/
  • 针对 Qt 安装器下载慢:去镜像网站下载:http://mirrors.ustc.edu.cn/qtproject/official_releases/online_installers/

  • 针对 Qt 库在线安装时下载慢:切换到镜像源:网上有些文章说用 flddler 改 HTTP 代理地址,完全是多此一举,根本要不了那么麻烦。新版本的安装器(4.0.1-1 后)本身就提供了切换镜像的功能。在命令行中执行安装器,添加 --mirror https://mirrors.ustc.edu.cn/qtproject 参数。例如 Windows 下执行当前目录的安装器的命令为:

    ./qt-unified-windows-x86-online.exe --mirror https://mirrors.ustc.edu.cn/qtproject
    

    你可以先在 Qt 安装器的目录,打开 cmd,输入./<Qt安装器文件名>,如果能打开 Qt 安装,则在后面再加上 --mirror https://mirrors.ustc.edu.cn/qtproject ,进行安装。


004-Windows 下打开(尤其是C++写的)软件显示缺少 “xxx.dll” 文件

  • “dll” 是Dynamic Link Library(动态链接库)的缩写,静态库在编译链接的时候就要引入,而动态库在程序执行的时候才引入,常用于存储可由多个程序共享的函数或数据;
  • 打开程序报错缺少的 “xxx.dll” 文件一般是系统自带或者常用程序的动态链接库,可以去 dll 网站(比如:找dll)下载缺失的 .dll 文件,放到 C:\Windows\SysWOW64C:\Windows\System32 目录下面。

005-Matlab 打开别人的程序,中文注释乱码

  • 这是编码格式的问题,可能别人的程序是 GBK 而我们的是 UTF-8,可以参考 Matlab不同版本之间的乱码问题 来修改。

006-Matlab 图表中显示中文字符为 □

  • 新建一个 startup.m 文件,放到你安装位置,然后在 .m 文件里面 set() 有中文的字体。
  • 可以参考:matlab编程或者画图时输出汉字为□□?

007-调试 C/C++ 程序出现异常,直接进汇编代码,不知道是哪里的问题

  • 大部分编译器都可以显示调用堆栈,可以让我们直接看到执行哪一行代码出了问题;
  • 最常见的异常是访问没初始化的变量和字段、访问已经释放的指针;

008-使用 Eigen 库编译时报一堆错,不知道是哪里的问题

  • Eigen 是 C++ 的一个开源线性代数库,主要是进行矩阵运算,对导航算法相当关键,要知道导航算法基本都是矩阵计算。除了基本的矩阵计算之外,支持四元数、旋转矩阵,C++ 写的导航定位的开源代码中基本都会用到 Eigen。
  • 使用 Eigen 有个麻烦的地方就在于难以调试,经常报错了,你找不到问题在哪,尤其是一口气写了一大段。有的错误写出来的时候编译器就会提示你错了,有的编译的时候就报错并且告诉你哪一行出错了,这两种都还比较友好;麻烦的是的是有的编译的时候报错不告诉你哪一行错,有的编译能过,运行到那一行才出错。
  • 我习惯写两行就编译一下,写几句就单步调试一下,要不然写多了不好调试。

009-使用 VSCode 调试 C/C++ 程序看不到指针指向变量的值

  • 在监视窗口输入要查看表达式来查看;
  • 数组可能还是不方便直接看,得输出到终端或者文件才能看到:
    • RTKLIB 及其二次开发程序可以用 tracemat() 函数;
    • Eigen 库重载了 <<,可以直接 Cout 输出到数据流;

010-Linux 下编译 Cmake 构建的程序,找不到已经安装过的库

  • 可能是因为库装到/usr/local/lib 里了,试试创建软链接到 /usr/lib

    ln -s /usr/local/lib/库名.a /usr/lib/库名.a
    
  • 也可以直接把 /usr/local/lib 也添加到包含目录。

011-VS 下设断点显示“当前不会命中断点。还没有为该文档加载任何符号。”

可能是设置成了 Relese 模式,改成 Debug 模式才能断点调试。


012-Windows 下用 VSCode 编译 KF-GINS 无法进入断点

把 lunch.json 文件中的 "type": "cppvsdbg" 改为 "type": "cppdbg"


013-WSL 通过 VcXsrv 使用 xfce4 图形界面报错:“Can‘t open display”、“Connection refused”

  • vim ~./bashrc 在末尾加上 export DISPLAY=127.0.0.1:0,或者后面填自己的 IP 地址,保存退出。
  • 执行命令: source ~/.bashrc
  • 打开 Xluanch ,前两步默认设置就行,第三步中 Disable access control 一定要选上;
  • 执行命令:startxfce4,即可启动界面。

014-.sh shell 脚本无法执行,提示 “command not found”、“permission denied”

  • 提示 permission denied 显然是因为要管理员权限,可以在命令前面加上 sudo
  • 提示 command not found 可能是因为文件没有执行权限,可以通过命令来添加:chmod +x <.sh 脚本名>

015-VSCode 远程安装插件特别慢

要配置 VSCode + WSL 的开发环境,需要在 WSL 里也装上 C++、CMake 系列的插件,直接下载方式特别慢。

  • 先去网站下载后缀名为 .VXIS 的插件:https://marketplace.visualstudio.com/;
  • 把 VXIS 文件放到 WSL 中,VScode 中可以直接把资源管理器中的文件托入左侧文件列表;
  • VSCode 中选择通过 VXIS 安装,在下来菜单中选择要安装的 VXIS 文件,稍等片刻即安装成功。

016-远程控制 ROS 没有访问权限

  • 远程控制 ROS 需要从机和主机在同一个局域网下面,也就是连同一个 WiFi 或者热点,或者一个电脑机连一个电脑的热点;

  • 需要改 .bashrc 文件设置多机通信的环境:

    • 在 ROS 主机的 .bashrc 文件最后添加:

      export ROS_MASTER_URI=http://(这里填ros主机的IP地址):11311
      export ROS_HOSTNAME=(这里填ros主机的IP地址)
      
    • 在 ROS 从机的 .bashrc 文件最后添加:

      export ROS_MASTER_URI=http://(这里填ros主机的IP地址):11311
      export ROS_HOSTNAME=(这里填ros从机的IP地址)   # ifconfig查询
      

017-Keil 下载程序到单片机报错“找不到仿真器”、下载完程序不自动运行

  • 如果你缺少连了仿真器,但还是说找不到,可能是因为项目设置中仿真器没选择好,进入【Option for Target】,在【Debug】选项卡的右上角选择对应的仿真器;
  • 默认下载程序之后都不会自动运行,按一下单片机上的复位按键手动复位之后,就会执行新烧录的程序;
  • 如果你希望程序烧录之后,单片机立刻复位执行,可以进入【Option for Target】,点【Debug】选项卡右上角的【Setting】进入程序下载配置窗口,把【Flash DownLoad】选项卡的【Reset and Run】勾选上。

018-Keil 中文注释乱码、串口输出中文乱码

  • 中文注释乱码:打开【Configuration🔧】在【Editor】选项卡中设置【Encoding】为UTF-8;
  • 串口输出中文乱码:打开【Option for Target】,在【C/C++】选项卡中将【MiscControls】填写为:--no-multibyte-chars

019-把文件名作为命令行参数时会遇到的问题

  • Linux 文件路一般是 /usr/bin,很少出问题;
  • Window 文件路径一般是 C:\windows\system32,比较容易出问题,因为 \ 是 C/C++ 中的转义字符,会将后面的字符转义,不能直接输入,需要把目录中的 \ 换成 / 或者 //
  • 在 VS 中的项目配置输入命令行参数时,直接输原本的路径就好,VS 会自动将输入参数的 / 改为 //

020-VSCode 调试程序的时候,程序不执行,出现“因ENTRY已暂停”

  • 这是因为在 lunch.json 文件中设置了 "stopAtEntry": true,在程序入口处暂停;

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

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

相关文章

MySQL 8 命令安装卸载教程

一、下载MySQL8 下载连接 MySQL :: Download MySQL Community Server 我下载的是当前最新版8.4 二、安装 1.解压 解压到需要安装的位置&#xff0c;例如我的位置&#xff1a; 2.创建配置文件 新建文本文档&#xff0c;复制下面配置文件&#xff08;注意修改路经&#xff09;…

Modbus TCP什么场景用?

什么是Modbus TCP Modbus TCP是一种基于TCP/IP网络的通信协议&#xff0c;它允许不同的设备通过以太网进行数据交换。Modbus协议最初是为串行通信设计的&#xff0c;但随着网络技术的发展&#xff0c;Modbus TCP应运而生&#xff0c;它继承了Modbus RTU和Modbus ASCII的许多优点…

平凉小果子,平凡中的惊艳味道

平凉美食小果子&#xff0c;这看似平凡的名字背后&#xff0c;藏着无数平凉人的美好回忆。它不仅仅是一种食物&#xff0c;更是一种情感的寄托&#xff0c;一种文化的传承。小果子的制作过程看似简单&#xff0c;实则蕴含着深厚的功夫。选用优质的面粉作为主要原料&#xff0c;…

Java学习笔记(多线程):CompetableFuture

本文是自己的学习笔记&#xff0c;主要参考资料如下 https://www.cnblogs.com/dolphin0520/p/3920407.html JavaSE文档 https://blog.csdn.net/ThinkWon/article/details/102508721 1、Overview2、重要参数3、主要方法3.1、创建实例&#xff0c;获取返回值3.2、线程执行顺序相关…

std::trhead的回调,中频繁发送信号,会导致qt的事件循环处理不过来吗

在Qt中,事件循环是负责处理所有事件和信号的核心机制。事件循环会不断地检查是否有待处理的事件,并且调度相应的事件处理器。在标准模板库(STL)的std::thread中使用回调函数来频繁发送信号到Qt的事件循环中,确实可能会导致性能问题,尤其是在高频率信号发送的情况下。 当…

大自然高清风景视频无水印素材在哪下载?下载视频素材网分享

在视频创作领域&#xff0c;一段高清的风景视频可以极大地提升你的作品质感。无论是作为背景、过渡片段还是主要内容&#xff0c;优质的风景视频素材都是必不可少的。然而&#xff0c;寻找既高清又无水印的风景视频素材并非易事。为了帮助大家轻松获取这类素材&#xff0c;我整…

牛客周赛 Round 48 解题报告 | 珂学家

前言 题解 这场感觉有点难&#xff0c;D完全没思路, EF很典&#xff0c;能够学到知识. E我的思路是容斥贡献&#xff0c;F很典&#xff0c;上周考过一次&#xff0c;引入虚拟节点质数(有点像种类并查集类似的技巧). 欢迎关注 珂朵莉 牛客周赛专栏 珂朵莉 牛客小白月赛专栏 …

Marin说PCB之total etch length规则知多少?

魔都上海最近迎来了一轮梅雨季节了&#xff0c;小编我上周就已经提前把被子衣服袜子都晒了一遍&#xff0c;省的后面一段时间下雨就不能晒了。这种阴雨绵绵的天气当然在家里睡觉最舒服了&#xff0c;上周留正当我在家里夏眠的时候&#xff0c;突然被一阵手机铃声吵醒了&#xf…

代码签名证书:保护你的软件,就像保护你的宝贝

Hey&#xff0c;大家好&#xff01;今天我们来聊聊一个听起来可能有点技术宅&#xff0c;但实际上超级重要的东西——代码签名证书。别担心&#xff0c;我会用最简单易懂的话来解释它&#xff0c;保证你看完这篇文章后&#xff0c;能对代码签名证书有个全新的认识&#xff01; …

苹果Mac安装adobe软件报错“installer file may be damaged”解决方案

最近Mac电脑系统的有小伙伴在安装PS、AI、AE、PR等软件&#xff0c;出现了一个错误&#xff0c;让人头疼不已&#xff0c;苦苦找寻&#xff0c;也找不到完美的解决方法。让我们来一起看看吧&#xff01; 很多小伙伴都喜欢苹果电脑&#xff0c;但是在安装外来软件时&#xff0c;…

python--os.walk()函数使用(超详细)

在Python 3.7中&#xff0c;os.walk()函数的用法与早期版本&#xff08;包括Python 3.4及之后&#xff09;保持一致。os.walk()是一个用于遍历目录树的生成器函数&#xff0c;它生成给定目录中的文件名。这个函数没有直接的参数&#xff08;除了你要遍历的目录路径&#xff0c;…

Java后端 || ElementUI 显示后端树形表格数据

文章目录 1、前端源码2、数据库设计3、后端设计3.1、实体类3.2、Controller层3.3、具体树形列表后端代码实现 1、前端源码 ElementUI Table 链接 在此链接中找到 树形数据与懒加载 查看其JS源码&#xff0c;可知&#xff0c;每个菜单节点的子节点存放于children字段中&#x…

讲讲js中的prototype和__proto__

在Javascript中&#xff0c;prototype和__proto__是两个重要的概念&#xff0c;在对象的原型链中扮演重要的角色。 prototype prototype是js函数的内置属性&#xff0c;每个函数都有一个prototype属性&#xff0c;它是一个指针&#xff0c;指向一个对象&#xff08;原型对象&a…

信息学奥赛初赛天天练-36-CSP-J2021阅读程序-ASCII、运算符优先级、二进制补码存储、模拟算法应用

PDF文档公众号回复关键字:20240626 2021 CSP-J 阅读程序2 1 阅读程序(判断题1.5分 选择题3分 共计40分 ) #include<stdio.h> #include<string.h>char base[64]; char table[256]; char str[256]; char ans[256];void init() {for(int i0;i<26;i) base[i]Ai;fo…

MySQL之可扩展性(四)

可扩展性 向外扩展 分片?还是不分片&#xff1f; 这是一个问题&#xff0c;对吧&#xff1f;答案很简单:如非必要&#xff0c;尽量不分片。首先看是否能通过性能调优或者更好的应用或数据库设计来推迟分片。如果能足够长时间地推迟分片&#xff0c;也许可以直接购买更大地服…

MySQL添加外键约束经典案例

1DDL建表语句 需要一个emp员工表和一个dept部门表 CREATE TABLE emp (id int NOT NULL AUTO_INCREMENT,name varchar(50) COLLATE utf8mb4_0900_as_ci NOT NULL COMMENT 姓名,age int DEFAULT NULL COMMENT 年龄,job varchar(20) COLLATE utf8mb4_0900_as_ci DEFAULT NULL CO…

黑马程序员——Spring框架——day09——linux初级

目录&#xff1a; 前言 什么是Linux&#xff1f;为什么要学Linux 企业用人要求个人发展需要学完Linux能干什么 1).环境搭建2).常用命令3).安装软件4).项目部署小结2.Linux简介 主流操作系统Linux发展历史Linux系统版本Linux安装 安装方式介绍安装VMware安装Linux网卡设置安装S…

flink 处理函数和流转换

目录 处理函数分类 概览介绍 KeydProcessFunction和ProcessFunction 定时器TimeService 窗口处理函数 多流转换 分流-侧输出流 合流 联合&#xff08;Uniion&#xff09; 连接&#xff08;connect&#xff09; 广播连接流&#xff08;BroadcatConnectedStream&#xf…

Python列表函数append()和extend()的区别

Python列表提供了两个容易混淆的追加函数&#xff1a;append()和extend()。它们之间的使用区别如下&#xff1a; list.append(obj)&#xff1a;对象进栈。将一个对象作为整体追加到列表最后&#xff0c;返回Nonelist.extend(iter)&#xff1a;可迭代对象的元素逐个进栈。将一个…

数据结构——

1. 什么是并查集&#xff1f; 在计算机科学中&#xff0c;并查集&#xff08;英文&#xff1a;Disjoint-set data structure&#xff0c;直译为不数据结构交集&#xff09;是一种数据结构&#xff0c;用于处理一些不交集&#xff08;Disjoint sets&#xff0c;一系列没有重复元…