ROS调试工具 📅 发布时间:2026/7/17 8:23:27 👁️ 浏览次数: 本文为ROS调试工具的笔记主要聚焦于代码调试部分日志、GDB、Valgrind 调试工具概览ROS集成了丰富的调试工具主要分为以下几类代码调试GDB、valgrind、日志可视化调试rqt_graph网络拓扑、rqt_console消息、rqt_logger_level日志、RVIZ三维可视化、rqt_plot趋势图单元测试Cgtest、Pythonnosetests通信调试rostopic、rosbag系统检查roswtf、rosnode、rosservice、rosparam系统仿真URDF、Gazebo 代码调试1. 日志调试日志等级严重程度递增DEBUG→INFO→WARN→ERROR→FATAL对应宏ROS_DEBUG、ROS_INFO、ROS_WARN、ROS_ERROR、ROS_FATAL日志位置默认路径~/.ros/log可通过设置环境变量ROS_LOG_DIR修改建议在~/.bashrc中配置2. GDB 调试GDB 是 C/C 调试工具用于设置断点、查看变量和环境。进入调试模式catkin config-DCMAKE_BUILD_TYPEDebug三种调试方式命令行调试在 launch 文件中配置nodenameclientpkgexample_3typeclientoutputscreenlaunch-prefixxterm -e gdb --args/注xterm -e会新建终端执行 GDBVSCode 可视化调试配置launch.json中的program项通过菜单运行 → 启动调试开始配置示例launch.json{version:0.2.0,configurations:[{name:Debug,type:cppdbg,request:launch,program:${workspaceRoot}/devel/lib/example_1/hello,cwd:.}]}开始调试设置断点启动 Master 节点点击运行 → 启动调试3. Valgrind 调试Valgrind 通过模拟 CPU 运行配合插件进行内存和性能分析。常用插件Memcheck检测内存泄漏、非法内存访问Callgrind函数调用关系分析Cachegrind缓存命中/丢失分析Helgrind多线程竞争分析Massif堆栈内存分析在 launch 文件中配置 Valgrindnodenamehellopkgexample_1typehellooutputscreenlaunch-prefixvalgrind --leak-checkfull --show-leak-kindsall/常用参数说明--track-originsyes显示未定义变量的来源--leak-checkno|summary|full内存泄漏检查级别--show-leak-kindsall显示所有泄漏类型总结日志调试快速定位代码流程和错误等级GDB调试深入分析逻辑错误和运行时状态Valgrind调试检测内存问题及性能瓶颈下面内容是关于Valgrind 调试的实际运行示例与输出解读。 Valgrind 调试实战1. 启动带 Valgrind 的 ROS 节点在终端中首先确保已编译调试版本并加载环境然后通过 launch 文件启动节点该文件已配置launch-prefix调用 Valgrindcd~/catkin_wssourcedevel/setup.bash roslaunch example_1 valgrind.launch示例输出ros/1og/3b5151ec-9053-11eb-8ff2-ef0b09d08f9d/ros1 sk usage. This may take a while. sage. Usage is 1GB.注部分输出可能因系统或日志记录而异重点是 Valgrind 会在后台运行并生成分析报告2. 理解 Valgrind 内存泄漏报告当节点运行结束或退出时Valgrind 会输出内存检查摘要。以下是一个典型的Memcheck 报告来自 IMG_446610153 LEAK SUMMARY: 10153 definitely lost: 11,000 bytes in 11 blocks 10153 indirectly lost: 0 bytes in 0 blocks 10153 possibly lost: 0 bytes in 0 blocks 10153 still reachable: 3,037 bytes in 40 blocks 10153 suppressed: 0 bytes in 0 blocks 10153 10153 ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)各项含义definitely lost明确泄漏的内存程序运行结束后仍然没有被释放且没有指针指向它们。这是最需要关注的部分。indirectly lost由于父块泄漏而导致依赖块无法释放通常与数据结构如链表有关。possibly lost可能泄漏指针指向内存块的某个位置而非起始位置导致释放困难一般也需要检查。still reachable内存尚未释放但仍有指针指向它们程序退出时通常由操作系统回收。虽然不算严格泄漏但长时间运行的程序应避免累积。suppressed被抑制的错误通常是因为 Valgrind 的 suppression 文件过滤了某些已知问题。错误统计ERROR SUMMARY: 1 errors from 1 contexts表示检测到 1 个内存错误例如非法读写或泄漏开发者应据此定位代码。3. 如何定位泄漏代码若要获取更详细的泄漏位置需在 launch 文件中添加更详细的 Valgrind 选项例如node...launch-prefixvalgrind --leak-checkfull --show-leak-kindsall --track-originsyes --verbose/--verbose可输出更多信息包括每个泄漏的调用栈。结合调试符号编译时加-gValgrind 会指出泄漏发生的源文件和行号。4. 根据报告修复问题definitely lost检查所有new/malloc是否有对应的delete/free尤其是在异常路径或提前返回处。still reachable若程序生命周期内需要长期保留如全局单例可忽略否则应确保在合适时机释放。重新编译并再次运行 Valgrind验证泄漏是否消除。 小结Valgrind 的 Memcheck 是定位内存问题的利器通过--leak-checkfull可获得详细报告。在 ROS 中通过 launch 文件的launch-prefix集成 Valgrind无需修改代码即可检测节点内存状况。报告中的 “definitely lost” 是必须修复的硬伤“still reachable” 视情况而定。
【实时Linux工业PLC解决方案系列】第二十六篇 - 实时Linux PLC抗干扰优化方案 一、简介:为什么抗干扰是工业PLC的"生死线"?工业现场有多恶劣?变频器启停产生4kV快速瞬变脉冲群(EFT)大功率电机造成电压跌落至标称值的70%持续20ms焊接机器人产生30V/m射频电磁场接地系统不良导致共模电压&… 2026/7/17 8:23:04
5大核心功能节省80%重复操作:BetterGI智能辅助工具全解析 5大核心功能节省80%重复操作:BetterGI智能辅助工具全解析 【免费下载链接】better-genshin-impact 🍨BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动派遣 | 一键强化 - UI Automation Testing Tools … 2026/7/16 16:24:10
“箭头函数的设计初衷是简化回调、绑定词法 this”的补充说明 “ 箭头函数的设计初衷是简化回调、绑定词法 this ”的补充说明 文章目录“ 箭头函数的设计初衷是简化回调、绑定词法 this ”的补充说明前言一、「词法 this」到底是什么?二、代码说明1.普通函数:this 会「跑飞」2.箭头函数:this 被「钉死」… 2026/7/10 5:49:21
风火轮YY3568开发板评测:RK3568标杆之作 1. 风火轮YY3568开发板初印象:开箱即惊艳 当我拆开快递包装时,这块被业界称为"RK3568开发板天花板"的硬件就静静躺在防静电袋里。作为常年接触各类嵌入式设备的开发者,第一眼就被它的做工震撼到了——墨绿色PCB板上整齐排列着全贴片… 2026/7/17 8:19:32
CANN/asc-devkit SIMT any函数 any 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/cann/a… 2026/7/17 8:19:32
DeepSeek-R1大模型架构与部署实践解析 1. DeepSeek-R1技术架构深度解析DeepSeek-R1作为当前开源大模型领域的标杆产品,其技术架构体现了多项前沿AI研究的突破性成果。该模型基于DeepSeek-V3-Base架构,采用混合专家系统(MoE)设计,总参数量达到671B,激活参数37Bÿ… 2026/7/17 8:17:31
asc-devkit SIMT同步接口 asc_syncthreads 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcod… 2026/7/17 8:15:31
Linux系统优化代码字体显示:解决掘金平台阅读问题 1. 项目背景与需求分析作为一名长期在Linux环境下工作的开发者,我最近在使用掘金平台阅读技术文章时遇到了一个令人困扰的问题:代码高亮部分的字体显示效果极差,长时间阅读后眼睛非常疲劳。经过排查发现,这是因为我的Linux系统缺少… 2026/7/17 8:13:31
AES加密实战:从字节代换原理到工作模式选型与错误排查 1. 项目概述:从理论到实战的AES核心环节如果你正在学习密码学,或者在工作中需要处理数据加密,那么AES(高级加密标准)这个名字你一定不陌生。它早已成为我们数字生活中无处不在的守护者,从HTTPS连接保护你的… 2026/7/17 8:13:31
【WPS AI表格避坑白皮书】:实测发现87%用户正在误用AI函数——这5个致命错误导致结果偏差超42% 更多请点击: https://intelliparadigm.com 第一章:WPS AI表格的核心能力与适用边界 WPS AI表格将大语言模型能力深度集成于电子表格环境中,实现从自然语言指令到结构化数据操作的端到端转化。其核心并非替代传统公式或宏编程,而是… 2026/7/17 0:00:08
Cursor终端插件生态避坑指南:23个实测低效插件黑名单,附3个自研轻量替代方案 更多请点击: https://intelliparadigm.com 第一章:Cursor终端插件生态避坑指南概览 Cursor 作为基于 VS Code 内核构建的 AI 原生编辑器,其终端插件生态虽活跃,但存在兼容性断层、权限策略突变与调试链路断裂等典型风险。开发者常… 2026/7/17 0:00:08
ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表) 更多请点击: https://codechina.net 第一章:ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表) 提示词工程已从经验试错迈入变量驱动的科学阶段。实证研究表明,影响… 2026/7/17 0:00:08
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/17 0:28:39
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/17 6:02:24
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/16 12:08:13