181017:ros运行过程中的Segmentation fault(段错误)解决方法

在运行程序的过程中,曝出了Segmentation fault(Core Dump)的错误,在朋友的帮助下才得以解决,实在惭愧,在此记录一下解决的办法。

想要定位代码中的问题,就需要进行单步调试,在调试之前,更改一下cmakelist文件,在文件最后的主程序target_link_libraries后,添加一行:set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -msse3 -std=c++11"),设置成单步调试的模式。

启用gdb

找到对应的文件,例如:file devel/lib/main_decision/main_decision,运行之后会有reading symbols from ...done的字样显示。

输入run命令,会显示 starting program: /。。。。之后会在错误的地方停止运行,显示相应的错误信息。

想要显示程序中的变量值,可以在gdb中输入disp (name),以查看对应的值有没有溢出等常见的问题。

 

总结:

网上所说的关于这个问题的注意事项可以提供很好的参考,可以大致的知道问题会出现在哪些地方。

我的程序的问题是for循环中总量大于已有的量,导致类似循空值的问题,更改正确的值后便得以解决。

在解决该问题的时候发现在回放rosbag的时候,要保证msg统一,否则bag中的信息无法传出来。

遇到这种自己很难解决的问题时,不能一味的瞎试,非常浪费时间,应该尽可能的在网上寻找解决方案,在看这些方案的时候会给你提供一些灵感。最终若还是没有解决办法的时候,要和身边的大牛多请教一下,或许就是人家2分钟的事,搞定你一天没有搞定的问题,都是泪。愿你终将成为一个拥有超强问题解决能力的人。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值