使用vscode和gdb调试oceanbase 中的 libeasy库的时候显示模块未导入,无法打断点,求解决方案

【 使用环境 】 测试环境
【 OB or 其他组件 】oceanbase
【 使用版本 】3.1.5
【问题描述】通过配置好vscode调试环境之后,发现libeasy及deps目录下的代码无法正常打断点停下,src目录下的可以正常在断点位置停下,使用gdb调试也是如此,无法定位到相应的上下文环境
【复现路径】
【问题现象及影响】想学习下libeasy库中ssl握手的代码,还请OB各位老师能够帮忙解答下看,谢谢啦

【附件】

1 个赞

我试了下gdb下其它的断点可以正常断下来,也可以看到符号信息。
你的编译模式是DEBUG吗?还有,代码文件跟编译出来的二进制文件,是对应的吗?

老师好,谢谢您的回复,我使用的是github oceanbase仓库wiki上面的debug编译指令
bash build.sh debug --init --make
然后再使用/tools/deploy 下面的obd.sh 先执行 ./obd.sh prepare ,然后进行部署使用
./obd.sh deploy -c single.yaml,最终进行调试的时候在libeasy库中不能打断点,请问下是不是需要更改下CMakeLists文件,或者进行编译的时候需要带些其他的参数,谢谢您的关注

我使用gdb测试没有调整任何参数。楼主使用gdb调试会报什么错误?
如果行号不能断点,也试试直接使用函数名。libeasy下面的都是C代码,命名空间都没有。

对了,先不要尝试断static函数,先找个长的非常普通的函数测试一下看。

谢谢老师的回复,找到问题所在了,因为要更改OB ssl的属性,所以每次都得再次启动,而我启动的时候是用的直接./安装目录下的二进制包,所以出现找不到符号的错误,后面改为用obd脚本 start后启动,就可以正常调试了。可是使用vscode调试还是会出现上述问题,用gdb调试的话相对来说有点麻烦,想请教下老师,看有没有更方便一点调试的方法,谢谢您的关注与答复!

用obd.sh部署后,直接使用obd.sh gdb 命令,启动调试。
进程启动后,vscode远程attach的方式开启调试。

已经可以用vscode调试了,在cmake文件夹中的的Env.cmake中
注释掉 set(DEBUG_PREFIX “-fdebug-prefix-map=${CMAKE_SOURCE_DIR}=.”),可以解决vscode调试源码找不到的问题,然后不使用之前的sourcefilemap就可以正常打断点了。谢谢老师的关注与答复!

2 个赞

您好,我也在用vscode attach模式打断点,但是现在遇到的问题是断点能正常停止,却无法进行单步调试,请问下您是怎么配置launch.json文件的?

oceanbase启动时,会fork出来一个子进程,索引不容易直接使用gdb或者vscode launch 起来。