在Oceanbase调试中,必须用到gdb,将常用命令搜集记录如下:
1. attach: 用gdb调试一个正在运行中的进程
gdb <program> PID
2. br: 设置断点
br filename:line_num
br namespace::classname::func_name
3. n: 单步跳过 s: 单步进入
4. finish:执行到函数retun返回
5. list: 列出当前位置之后的10行代码;list line_number: 列出line_number之后的十行代码
6. bt(backtrace):列出调用栈
7. info locals:列出当前函数的局部变量
8. p var_:打印变量值
9. info breakpoints:列出所有断点
10. delete breakpoints:删除所有断点;delete breakpoints id:删除编号为id的断点;disable/enable breakpoints id:禁用/启用断点
11. break ... if ... 条件中断
C++中用GDB调试的注意事项:
1. 函数断点的结构是namespace::ClassName::funcName
(gdb) b oceanbase::mergeserver::ObMsSqlScanEvent::process_result
Breakpoint 1 at 0x435c0a: file ob_ms_sql_scan_event.cpp, line 533.
还有一个小问题,网上很少提到:被调试的程序必须和源码放在同一台机器上,才能用list命令列出源码,否则提示找不到。
直接回车,总可以重复执行上一个命令。
参考: http://baigoogledu.blog.51cto.com/738227/153948
涉及到多线程调试,参考:http://wenku.baidu.com/view/ab2b0623bcd126fff7050ba0.html