continue to run
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>
{
...
}