在运行程序的过程中,曝出了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分钟的事,搞定你一天没有搞定的问题,都是泪。愿你终将成为一个拥有超强问题解决能力的人。