Red de conocimiento informático - Aprendizaje de código fuente - ¿Cómo depuran MySQL los novatos?

¿Cómo depuran MySQL los novatos?

Hace unos días, leí el antiguo artículo del profesor Jiang sobre el uso de VSCode para compilar y depurar MySQL, una habilidad que todo DBA debería dominar [1]. Dejé una pregunta al final del artículo, pensando. sobre cómo modificar el código fuente para personalizar la versión. Deje que select version() genere contenido personalizado

Para conocer el proceso de depuración, consulte Compilación de macOS VSCode y depuración de MySQL 5.7[2]

Referencia de objeto de elemento interno desde la declaración SQL al objeto interno de MySQL[3]

No hay secretos en el código fuente. Si está interesado en DB, intente depurarlo. Este artículo se aplica a mac + vscode + lldb

complemento vscode:

código fuente de mysql:

parche: MySQL <= 8.0.21 necesita parche cmake/mysql_version.cmake (no todas las versiones se prueban estrictamente)

Cree el directorio cmake-build-debug, y los archivos generados después de la posterior compilación e inicio de mysql se ubicarán en este directorio

Crear en el directorio mysql el archivo .vscode/settings.json

El contenido de este archivo no es nada que escribir, pero especifica el directorio y la configuración de inicio, en el que CON_DEBUG activa el modo de depuración

El contenido de este archivo no se puede escribir. DEBUG activa el modo de depuración y genera información de depuración en /tmp/debug.trace

Ver -> Paleta de comandos -> CMake: Configurar genera la configuración de cmake después de la ejecución

Ver -> Paleta de comandos -> CMake: compila el comando final relacionado con la compilación de MySQL

Encontré que la versión anterior de la compilación era muy problemática y reportaba varios errores. 7 tiene más código que 5.5, así que tuve que mirar 5.7

Primero, inicialice la configuración de my.cnf, una configuración simple *** es la predeterminada

Inicialice el archivo de datos en modo no seguro para depuración

Debido a que vscode se hace cargo de mysql, debe configurar .vscode/launch.json

Luego haga clic en Ejecutar y depurar mysqld

p >

Se inicia Mysql, verá que la salida del registro es normal. Step Into, Step Over, Step Out puede estar familiarizado con estas depuraciones

A continuación, llame a las funciones principales: mysql_execute_command, ejecutar_sqlcom_select, handle_query, select->join->exec(), Query_ result_send::send_send: :send () , Query_ result_send::send_send::send_send result_send::send_data , Item::send , Item_string:val_str , Protocol_text::store , net_send_ok

init_common_variables inicializará un montón de variables al iniciar mysql .

La función .cc PTI_function_call_generic_ident_sys analiza el sql y reconoce que version() es una llamada de función

find_native_function_builder busca en la tabla hash y encuentra la función de fábrica singleton correspondiente al registro de la función de versión.

Se llama a Item_create_init cuando mysql comienza a registrar estos constructores de funciones en la tabla hash Native_functions_hash

El código MySQL es muy grande, alrededor de 1 millón de líneas en 5.1 y alrededor de 1,3 millones de líneas en 5.5 , 5.7 y versiones posteriores tienen alrededor de 330.000 líneas, por lo que debes elegir lo que deseas leer. No sé si puedo hacer esto. Recientemente, muchas personas en el grupo están memorizando el código fuente, por lo que no es necesario.

Código fuente original: /s/lJqb0kMtnAUmqUIWCShkIQ

Fuente original: /s/lJqb0kMtnAUmqUIWCShkIQ