continue to run

@ShiKaiWi

Plan

60min: ClickHouse Store Procedure

Notes

LLDB debug

今天算是磨刀不误砍柴功吧,本来尝试通过日志来观察整个写入流程,目前发现了更好的方式: lldb debug。 本来想采用 attach 的方式进行 debug,但是无论怎么尝试都会遇到 attach 上去,process 就跪掉的问题,没有动力去搞明白这个问题,因此我就尝试直接使用 lldb 启动 server:

cd ./dbms/programs/server/
lldb ../../../build/dbms/programs/clickhouse
breakpoint set --file src/Access/AccessRightsContext.cpp --line 141
run server

有两件事情需要注意一下:

  • 不设置断点的话,会因为一直跑,停不下来,而无法进行调试
  • run server 第二个参数是作为 clickhouse 的参数传入

启动好了 server,设置好了断点之后,我们就可以使用 client 接上去,注意很有可能一连接上去就会触发断点,触发了断点之后就很好操作了:

# continue to run
continue
# step over
n
# step in
s
# check variable value
fr v $var_name

ClickHouse 写入流程

在把 lldb 用起来之后,花了很少的时间进行了写入流程的起始定位,明天就可以将断点设置在这个写入流程的位置上: src/Interpreters/executeQuery.cpp:L328

More

  • 下面这段代码:
class IStorage : public std::enable_shared_from_this<IStorage>, public TypePromotion<IStorage>
{
    ...
}