OceanBase在进行源码debug调试的时候,如果打一个比较上层的断点时,可能有几十个线程命中,如何确定哪个是执行当前sql的线程呢
源码调试这块的经验,建议可以找下“多线程场景下断点调试”的方法
多线程的OB调试确实很难调试。如果你知道是某个特定的函数,知道对当前的SQL对这个特定函数会产生什么特殊参数的话,可以设置条件断点。
如果是想查看某个函数的栈信息,除了设置断点,还可以打印日志的方式,比如LOG_WARN(“xxxx”, KCSTRING(lbt()); 就可以在日志中看到栈信息了
1 个赞
那我可以进行单线程的 OB 调试嘛,不知道是不是开了线程池的缘故,比如我先通过某个特定函数或者DDL语句,找到了当前线程,但是我再执行下一个SQL的时候,线程号就变了
OB使用的是线程池,每次执行某个SQL分配的线程可能是不同的。按照你的说法,要先找到特定的断点,然后再执行SQL调试。