ROS2 使用 backtrace 函数无效猜想

博客探讨了在ROS2环境中,使用backtrace和addr2line解析栈函数地址无效的问题,以及通过GDB调试能够获取正常栈信息的情况。指出ROS2节点启动方式与ROS1不同,可能影响地址解析,并怀疑可能是在ROS2执行空间上启动节点导致的。同时,注意到单独运行ROS2执行文件会遇到库依赖问题。作者寻求验证这一假设的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、使用 backtrace 和 backtrace_symbols 打印的栈函数地址,用 addr2line 指令解析无效,已确定编译时加了 -g -ggdb 的 Debug 模式。
在这里插入图片描述
2、使用 ROS2 进入 GDB 调试,可以正常打印栈的函数信息。说明 backtrace 函数在系统环境是起作用,没有阉割和优化的。
(ros2 进入 gdb 模式和 ros1 一样,可以参考:ros 加-g编译或debug编译
在这里插入图片描述
3、单独运行 ROS2 编译好的执行文件,不用ros2 run 去执行,发现缺少库依赖,这点和ros1的不一样,ros1的可以直接执行。
在这里插入图片描述
4、ps查看节点执行的时候,发现除了节点应用起来了,还有个 ros2 的应用,联想启动命令是 ros2 run mcu_controller mcu_controller。
在这里插入图片描述

5、怀疑 ros2 的节点起来和 ros1 的启动机制不一样,可能是在 ros2 的执行空间上启动节点内容,导致栈地址用 addr2line 无法解析。

暂时想不到好的方法验证,有知道的大神可以指点一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值