解决办法有两种:
遇到标准库函数的语句,用单步跳过(逐过程),而不是单步执行,已经进入库函数了就单步跳出;
改编译器配置,一劳永逸的解决问题
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 }
出现这个问题的原因有很多,可能是你确实没有这个文件,可能是没放在环境变量或者默认包含路径里,可能是头文件写的包含路径不对;
还有一个可能的原因是因为没开管理员权限,我用 Arduino、Qt Creater、Keil 的时候都遇到过这种问题;可以右击软件图表,选择【属性】,在【兼容性】选项卡中,勾选【以管理员身份运行此程序】;设置成功之后,软件图标右下角应该会显示一个盾牌,之后每次打开直接就有管理员权限。
如果是 Qt 5.15 以前的版本,可以下载离线安装包:
针对 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
,进行安装。
- “dll” 是Dynamic Link Library(动态链接库)的缩写,静态库在编译链接的时候就要引入,而动态库在程序执行的时候才引入,常用于存储可由多个程序共享的函数或数据;
- 打开程序报错缺少的 “xxx.dll” 文件一般是系统自带或者常用程序的动态链接库,可以去 dll 网站(比如:找dll)下载缺失的 .dll 文件,放到
C:\Windows\SysWOW64
或C:\Windows\System32
目录下面。- 有些 DLL 文件看名字就能猜出它是啥,比如
Qt5Help.dll
,肯定是 Qt 里的,咱们需要把<Qt安装目录>\mingw\bin
添加到系统环境变量。
- 这是编码格式的问题,可能别人的程序是 GBK 而我们的是 UTF-8,可以参考 Matlab不同版本之间的乱码问题 来修改。
- 新建一个 startup.m 文件,放到你安装位置,然后在 .m 文件里面 set() 有中文的字体。
- 可以参考:matlab编程或者画图时输出汉字为□□?
- 大部分编译器都可以显示调用堆栈,可以让我们直接看到执行哪一行代码出了问题;
- 最常见的异常是访问没初始化的变量和字段、访问已经释放的指针;
- Eigen 是 C++ 的一个开源线性代数库,主要是进行矩阵运算,对导航算法相当关键,要知道导航算法基本都是矩阵计算。除了基本的矩阵计算之外,支持四元数、旋转矩阵,C++ 写的导航定位的开源代码中基本都会用到 Eigen。
- 使用 Eigen 有个麻烦的地方就在于难以调试,经常报错了,你找不到问题在哪,尤其是一口气写了一大段。有的错误写出来的时候编译器就会提示你错了,有的编译的时候就报错并且告诉你哪一行出错了,这两种都还比较友好;麻烦的是的是有的编译的时候报错不告诉你哪一行错,有的编译能过,运行到那一行才出错。
- 我习惯写两行就编译一下,写几句就单步调试一下,要不然写多了不好调试。
- 在监视窗口输入要查看表达式来查看;
- 数组可能还是不方便直接看,得输出到终端或者文件才能看到:
- RTKLIB 及其二次开发程序可以用 tracemat() 函数;
- Eigen 库重载了 <<,可以直接 Cout 输出到数据流;
可能是因为库装到
/usr/local/lib
里了,试试创建软链接到/usr/lib
:ln -s /usr/local/lib/库名.a /usr/lib/库名.a也可以直接把
/usr/local/lib
也添加到包含目录。
可能是设置成了 Relese 模式,改成 Debug 模式才能断点调试。
把 lunch.json 文件中的
"type": "cppvsdbg"
改为"type": "cppdbg"
vim ~./bashrc
在末尾加上export DISPLAY=127.0.0.1:0
,或者后面填自己的 IP 地址,保存退出。- 执行命令:
source ~/.bashrc
;- 打开 Xluanch ,前两步默认设置就行,第三步中 Disable access control 一定要选上;
- 执行命令:
startxfce4
,即可启动界面。
- 提示 permission denied 显然是因为要管理员权限,可以在命令前面加上
sudo
;- 提示 command not found 可能是因为文件没有执行权限,可以通过命令来添加:
chmod +x <.sh 脚本名>
;
要配置 VSCode + WSL 的开发环境,需要在 WSL 里也装上 C++、CMake 系列的插件,直接下载方式特别慢。
- 先去网站下载后缀名为 .VXIS 的插件:https://marketplace.visualstudio.com/;
- 把 VXIS 文件放到 WSL 中,VScode 中可以直接把资源管理器中的文件托入左侧文件列表;
- VSCode 中选择通过 VXIS 安装,在下来菜单中选择要安装的 VXIS 文件,稍等片刻即安装成功。
远程控制 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查询
- 如果你缺少连了仿真器,但还是说找不到,可能是因为项目设置中仿真器没选择好,进入【Option for Target】,在【Debug】选项卡的右上角选择对应的仿真器;
- 默认下载程序之后都不会自动运行,按一下单片机上的复位按键手动复位之后,就会执行新烧录的程序;
- 如果你希望程序烧录之后,单片机立刻复位执行,可以进入【Option for Target】,点【Debug】选项卡右上角的【Setting】进入程序下载配置窗口,把【Flash DownLoad】选项卡的【Reset and Run】勾选上。
- 中文注释乱码:打开【Configuration🔧】在【Editor】选项卡中设置【Encoding】为UTF-8;
- 串口输出中文乱码:打开【Option for Target】,在【C/C++】选项卡中将【MiscControls】填写为:
--no-multibyte-chars
。
- Linux 文件路一般是
/usr/bin
,很少出问题;- Window 文件路径一般是
C:\windows\system32
,比较容易出问题,因为\
是 C/C++ 中的转义字符,会将后面的字符转义,不能直接输入,需要把目录中的\
换成/
或者//
;- 在 VS 中的项目配置输入命令行参数时,直接输原本的路径就好,VS 会自动将输入参数的
/
改为//
;
- 这是因为在 lunch.json 文件中设置了
"stopAtEntry": true
,在程序入口处暂停;
- 当多个线程或进程同时尝试访问相同的数据缓存时,会出现缓存锁竞争的情况。这意味着一个进程正在更新缓存数据,而其他进程正在等待该锁释放,以便它们能够访问或修改缓存。
- 简单来说就是资源被别的程序占用了,实在找不到原因,可以重启系统来解决。
- could not load cache 就是无法加载缓存,可以删除除缓存,重新配置(cmake、make)。