目前想使用CLion这样的主流工具进行对ob进行debug,包括代码打断点那些的,但是琢磨半天也没办法,有大佬知道怎么搞嘛
用clion的比较少。很多都是用vscode(免费),vscode有远程开发模式,通常在服务器端启动一个observer进程,使用vscode远程开发,打断点进行调试。
如果clion有这种模式,应该是类似的。
个人习惯直接在服务端直接使用GDB进行调试。
开发逻辑简单的功能,推荐直接通过在代码里打 warning 日志调试,在日志里可以一次性把你想打印的所有变量全都打出来,然后在日志里 grep 你写的调试内容里的关键字,再通过阅读日志分析问题。
这是最简单高效的方式,也是我个人用的最多的调试方式。你会喜欢上这种调试方式的,哈哈~
如果遇到逻辑比较复杂的代码,推荐在测试机上用 gdb 调试:
- 在 observer 进程所在测试机上
ps xf
,找到 observer 的 pid。
[xiaofeng.lby@OceanBase192087.et2sqa /home/xiaofeng.lby]
$ps xf
PID TTY STAT TIME COMMAND
239848 ? S 0:00 sshd: xiaofeng.lby@pts/2
239849 pts/2 Ss 0:00 \_ -bash
239922 pts/2 R+ 0:00 \_ ps xf
209651 ? Ssl 28:29 /home/xiaofeng.lby/ob1.proxy0/bin/obproxy -p 22603 -n ob1.xiaofeng.lby -e -o obproxy_config_server_url=http://10.244.4.23:8080/diamond/cgi/a.py?key=ob
207671 ? Ssl 99:08 /home/xiaofeng.lby/ob1.obs0/bin/observer -P 22600 -p 22601 -z zone1 -n ob1.xiaofeng.lby -c 1 -d /home/xiaofeng.lby/ob1.obs0/store -l INFO -o memory_li
gdb attach pid
[xiaofeng.lby@OceanBase192087.et2sqa /home/xiaofeng.lby]
$gdb attach 207671
0x0000003d19eab91d in nanosleep () from /lib64/libc.so.6
(gdb) b sql/resolver/ddl/ob_ddl_resolver.cpp:3370
(gdb) c
Continuing.
用 gdb 进行单步调试非常慢,效率极低,尽量少用单步调试,多用断点。