Skip to main content
Skip to main content

内省功能

您可以使用本章中描述的函数来反省 ELFDWARF 用于查询分析。

!!! 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, where 199 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 列的输出。