内省功能
您可以使用本章中描述的函数来反省 ELF 和 DWARF 用于查询分析。
!!! warning "警告" 这些功能很慢,可能会强加安全考虑。
对于内省功能的正确操作:
-
安装
clickhouse-common-static-dbg
包。 -
设置 allow_introspection_functions 设置为1。
出于安全考虑,内省函数默认是关闭的。
ClickHouse将探查器报告保存到 trace_log 系统表. 确保正确配置了表和探查器。
addressToLine
将ClickHouse服务器进程内的虚拟内存地址转换为ClickHouse源代码中的文件名和行号。
如果您使用官方的ClickHouse软件包,您需要安装 clickhouse-common-static-dbg
包。
语法
参数
address_of_binary_instruction
(UInt64) — 正在运行进程的指令地址。
返回值
-
源代码文件名和行号(用冒号分隔的行号)
示例,
/build/obj-x86_64-linux-gnu/../src/Common/ThreadPool.cpp:199
, where199
is a line number. -
如果函数找不到调试信息,返回二进制文件的名称。
-
如果地址无效,返回空字符串。
类型: 字符串.
示例
启用内省功能:
从中选择第一个字符串 trace_log
系统表:
该 trace
字段包含采样时的堆栈跟踪。
获取单个地址的源代码文件名和行号:
将函数应用于整个堆栈跟踪:
该 arrayMap 功能允许处理的每个单独的元素 trace
阵列由 addressToLine
功能。 这种处理的结果,你在看 trace_source_code_lines
列的输出。
addressToSymbol
将ClickHouse服务器进程内的虚拟内存地址转换为ClickHouse对象文件中的符号。
语法
参数
address_of_binary_instruction
(UInt64) — Address of instruction in a running process.
返回值
- 来自ClickHouse对象文件的符号。
- 如果地址无效,返回空字符串。
类型: 字符串.
示例
启用内省功能:
从中选择第一个字符串 trace_log
系统表:
该 trace
字段包含采样时的堆栈跟踪。
获取单个地址的符号:
将函数应用于整个堆栈跟踪:
该 arrayMap 功能允许处理的每个单独的元素 trace
阵列由 addressToSymbols
功能。 这种处理的结果,你在看 trace_symbols
列的输出。
demangle
转换一个符号,您可以使用 addressToSymbol 函数到C++函数名。
语法
参数
symbol
(字符串) — Symbol from an object file.
返回值
- C++函数的名称。
- 如果符号无效,则为空字符串。
类型: 字符串.
示例
启用内省功能:
从中选择第一个字符串 trace_log
系统表:
该 trace
字段包含采样时的堆栈跟踪。
获取单个地址的函数名称:
将函数应用于整个堆栈跟踪:
该 arrayMap 功能允许处理的每个单独的元素 trace
阵列由 demangle
功能。 这种处理的结果,你在看 trace_functions
列的输出。