这一篇主要讲解如何在Ubuntu环境下调试mbsystem的代码。此次以EM2040采集的all格式记录文件为例,查看并验证其如何解析读取配置文件。
首先通过阅读源码发现,读取配置文件代码位于mbr_em710raw_rd_start函数,同时mbinfo工具会最终会通过mbr_em710raw.c文件调用mbr_em710raw_rd_start函数。可以使用这个命令进行测试。
(1)启动gdb
(2)设置参数命令
(3)分析加断点
可通过查看源码,通过函数方式添加断点mbr_em710raw_rd_start
添加断点成功(b为break缩写)
(4)启动执行代码
r为run缩写,运行至断点处
执行至断点处,上层为断点所在函数
(5)单步调试
Step和next进行单步调试
查看当前代码
(6)重新加断点,执行至新断点处
b是break的简写
(7)打印输出需要查看的设备信息
也可以使用p store->type 其中p是print的简写。
也可使用display store->type输出显示信息
注:
其他说明
(1)输出显示指针存储的波束点水深信息。
(2)mb是否可以用来调试?
可以调试,带有调试信息的可执行文件即可调试
(3)如果有多个.o文件a启动b,如何调试b中代码。
直接启动a,添加b中代码的函数断点,会将b符号加载进去
(4)mb目录下对应的.o文件是什么文件?
可以看出是含有调试信息的目标文件。不能用来调试(使用gdb加载时会加载成功,但是执行会失败,不是可执行文件)
(5)用gdb调试时想打印变量值,结果出现了optimized out,打印不出变量内容
打开configure文件和libtool文件,搜索-O2,将所有-O2替换为-O0,然后重新生成makefile即可。
参考资料:
[1]mbcookbook.pdf https://www.mbari.org/wp-content/uploads/2016/03/mbcookbook.pdf
[2] https://github.com/dwcaress/MB-System
[4] https://www.mbari.org/products/research-software/mb-system/
[5] https://blog.csdn.net/baidu_38172402/article/details/81152192
[6]https://www.mbari.org/products/research-software/mb-system/mb-system-announcements-archive/