Introducción a GDB:
GDB es una potente herramienta de depuración de programas UNIX lanzada por la organización GNU Open Source. Si trabajas en la plataforma UNIX, verás que GDB es una herramienta de depuración que tiene funciones más potentes que los depuradores gráficos de VC y BCB.
emitir
Entorno: Linux/PHP v5.5.7
Cuando el teléfono móvil accede al segundo plano de este sitio, haz clic en algunas páginas y aparecerá el error 502, y querrás saber cuál es la razón específica del error 502.
El registro de errores de php-fpm es el siguiente:
WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start
Archivo núcleo
El archivo núcleo es en realidad una imagen de memoria, que almacena la información correspondiente de la memoria cuando el programa se bloquea, y se utiliza principalmente para depurar el programa. Cuando el programa se bloquea, se genera un archivo núcleo; de hecho, debe decirse que es un archivo de volcado núcleo, la ubicación de generación predeterminada está en el mismo directorio que el programa ejecutable, el nombre del archivo es core.***, donde *** es un cierto número.
Mandar:
Tamaño del archivo principal (bloques, -c) 0 Data SEG Tamaño (kbytes, -d) ilimitado Prioridad de programación (-e) 0 Tamaño del archivo (bloques, -f) ilimitado Señales pendientes (-i) 7271 Memoria bloqueada máxima (kbytes, -l) 64 Tamaño máximo de memoria (kbytes, -m) ilimitado Archivos abiertos (-n) 65535 Tamaño de tubería (512 bytes, -p) 8 Colas de mensajes POSIX (bytes, -q) 819200 Prioridad en tiempo real (-r) 0 Tamaño de la pila (kbytes, -s) 8192 Tiempo de CPU (segundos, -t) Ilimitado Procesos de usuario máximo (-U) 7271 Memoria virtual (kbytes, -v) ilimitada Bloqueos de archivo (-x) ilimitados Si el tamaño del archivo núcleo es 0, el archivo núcleo no puede generarse y necesitamos configurarlo.
ulimit -c ilimitado, significa que el tamaño del archivo core es ilimitado
Montaje completado, recuerdaReiniciar el servicio php-fpm, el comando es el siguiente:
Revisa de nuevo el registro de errores, como sigue:
[23-May-2020 14:39:14] ADVERTENCIA: [pool www] el hijo 2220 salió en la señal 11 (SIGSEGV - núcleo descargado) a los 7,255225 segundos desde el inicio [23-May-2020 14:39:14] AVISO: [pool www] niño 2231 iniciado Si el registro contiene las palabras "SIGSEGV – core dumped", significa que el archivo rore ha sido generado con éxito.
El archivo central se generará en el directorio del sitio web; si no lo sabes, también puedes encontrar el archivo principal con el siguiente comando:
La dirección generada por el núcleo de mi servidor es: /alidata/www/itsvse_web/core.2220
Instalar gdb
El comando es el siguiente:
depuración gdb php-fpm
Prepara el archivo .gdbinit
El archivo .gdbinit está bajo el código fuente de PHP, ¡y debe ser consistente con la versión php que estás usando!
Mi dirección de archivo: /root/sh-1.5.5/php-5.5.7/.gdbinit
Descarga la dirección de la última versión php del archivo .gdbinit:
El inicio de sesión del hipervínculo es visible.
GDB para abrir el archivo central
En el directorio principal del archivo, ejecuta el siguiente comando:
[root@o itsvse_web]# GDB php-fpm -c core.2220 GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7 Derechos de autor (C) 2013 Free Software Foundation, Inc. Licencia GPLv3+: GNU GPL versión 3 o posterior <El inicio de sesión del hipervínculo es visible. Esto es software libre: eres libre de cambiarlo y redistribuirlo. NO HAY GARANTÍA, en la medida permitida por ley. Escribe "mostrar copia" y "mostrar garantía" para más detalles. Este GDB estaba configurado como "x86_64-redhat-linux-gnu". Para instrucciones para reportar errores, por favor consulta: <El inicio de sesión del hipervínculo es visible. Leer símbolos de /alidata/server/php-5.5.7/sbin/php-fpm... Hecho. [Nuevo LWP 2220] [Depuración de hilos usando libthread_db activada] Usando la biblioteca host libthread_db "/lib64/libthread_db.so.1". Core fue generado por 'php-fpm: pool www'. Programa terminado con señal 11, fallo de segmentación. #0 tsrm_realpath_r ( path=path@entry=0x7ffdd9ebf100 "/alidata/www/itsvse_web/./source/language/mobile/lang_template.php", start=start@entry=1, len=66, LL=ll@entry=0x7ffdd9ebf0f4, T=t@entry=0x7ffdd9ebf0f8, use_realpath=use_realpath@entry=2, is_dir=is_dir@entry=0, link_is_dir=link_is_dir@entry=0x0) at /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751 751 { Falta debuginfos separadas, usar: debuginfo-install cyrus-sasl-lib-2.1.26-23.el7.x86_64 glibc-2.17-307.el7.1.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.15.1-46.el7.x86_64 libcom_err-1.42.9-17.el7.x86_64 libcurl-7.29.0-57.el7.x86_64 libgcc-4.8.5-39.el7.x86_64 libidn-1.28-4.el7.x86_64 libselinux-2.5-15.el7.x86_ 64 libssh2-1.8.0-3.el7.x86_64 libstdc++-4.8.5-39.el7.x86_64 libxml2-2.9.1-6.el7.4.x86_64 nspr-4.21.0-1.el7.x86_64 nss-3.44.0-7.el7_7.x86_64 nss-softokn-freebl-3.44.0-8.el7_ 7.x86_64 nss-util-3.44.0-4.el7_7.x86_64 openldap-2.4.44-21.el7_6.x86_64 openssl-libs-1.0.2k-19.el7.x86_64 pcre-8.32-17.el7.x86_64 xz-libs-5.2.2-1.el7.x86_64 zlib-1.2.7-18.el7.x86_64 Puedes ver algo así como las siguientes palabras:
Core fue generado por 'php-fpm: pool www'. Programa terminado con señal 11, fallo de segmentación. bt(backtrace): Lista la pila de llamadas
(GDB) BT #0 tsrm_realpath_r ( path=path@entry=0x7ffdd9ebf100 "/alidata/www/itsvse_web/./source/language/mobile/lang_template.php", start=start@entry=1, len=66, LL=ll@entry=0x7ffdd9ebf0f4, T=t@entry=0x7ffdd9ebf0f8, use_realpath=use_realpath@entry=2, is_dir=is_dir@entry=0, link_is_dir=link_is_dir@entry=0x0) at /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751 #1 0x000000000075209a en virtual_file_ex (estado=state@entry=0x7ffdd9ec0140, path=path@entry=0xed3a4d8 "/alidata/www/itsvse_web/./source/language/mobile/lang_template.php", verify_path=verify_path@entry=0x0, use_realpath=use_realpath@entry=2) at /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:1292 #2 0x000000000075308c en tsrm_realpath ( path=path@entry=0xed3a4d8 "/alidata/www/itsvse_web/./source/language/mobile/lang_template.php", real_path=real_path@entry=0x7ffdd9ec1250 "vse_web/./source/plugin/dsu_amupper/pper.class.p\300\023\354\331\375\177") en /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c :1954
Revisa el hilo de salida
Introducción de .gdbinit (scripting de comandos gdb) proporcionado en el código fuente de PHP
Mira el zbacktrace y los valores de variables
(GDB) Zbacktrace [0xed9f8f0] lang() /alidata/www/itsvse_web/source/function/function_core.php:444 [0xed9e2e8] lang("core", "title_board_message") /alidata/www/itsvse_web/source/function/function_message.php:43 [0xed9a988] dshowmessage("mobile_template_no_found", "", array(1)[0xec46a28], array(0)[0xec46bc0], 0) /alidata/www/itsvse_web/source/function/function_core.php:1426 [0xed9a6d8] showmessage("mobile_template_no_found", "", array(1)[0xec46a28]) /alidata/www/itsvse_web/source/function/function_core.php:618 [0xed97638] plantilla("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82 [0x7ffdd9ec3e50] plugin_dsu_amupper->global_footer(matriz(0)[0xec40028]) [0xed97080] call_user_func(array(2)[0xed6b8b0], array(0)[0xec40028]) /alidata/www/itsvse_web/source/function/function_core.php:1177 [0xed954b8] hookscript("global", "global") /alidata/www/itsvse_web/source/function/function_core.php:1214 [0xed95218] hookscriptoutput("showmessage") /alidata/www/itsvse_web/data/template/8_8_touch_common_showmessage.tpl.php:1 [0xed949e8] ??? /alidata/www/itsvse_web/source/function/function_message.php:237 [0xed91088] dshowmessage("mobile_template_no_found", "", array(1)[0xec40c10], array(0)[0xec76d40], 0) /alidata/www/itsvse_web/source/function/function_core.php:1426 [0xed90dd8] showmessage("mobile_template_no_found", "", array(1)[0xec40c10]) /alidata/www/itsvse_web/source/function/function_core.php:618 [0xed8dd38] plantilla("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82 [0x7ffdd9ec49a0] plugin_dsu_amupper->global_footer(matriz(0)[0xec39ab0]) [0xed8d780] call_user_func(array(2)[0xeb833e8], array(0)[0xec39ab0]) /alidata/www/itsvse_web/source/function/function_core.php:1177 [0xed8bbb8] hookscript("global", "global") /alidata/www/itsvse_web/source/function/function_core.php:1214 [0xed8b918] hookscriptoutput("showmessage") /alidata/www/itsvse_web/data/template/8_8_touch_common_showmessage.tpl.php:1 [0xed8b0e8] ??? /alidata/www/itsvse_web/source/function/function_message.php:237 [0xed651b0] dshowmessage("mobile_template_no_found", "", array(1)[0xecc0fe0], array(0)[0xec76718], 0) /alidata/www/itsvse_web/source/function/function_core.php:1426 [0xed64f00] showmessage("mobile_template_no_found", "", array(1)[0xecc0fe0]) /alidata/www/itsvse_web/source/function/function_core.php:618 [0xed61e60] plantilla("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82 [0x7ffdd9ec54f0] plugin_dsu_amupper->global_footer(matriz(0)[0xeb834f8])
(GDB) Impresión ((Zval *)0xec46a28) $1 = (zval *) 0xec46a28 (GDB) PrintZV $1 [0xec46a28] (refcount=5) array(1): { "url\0" => [0xecb2fb0] (refcount=2) cadena(33): "/admin.php?action=index&mobile=no" } (GDB) Solución
En realidad no vi ningún error, pero era evidente por los registros que había un problema con el acceso móvil, y tras las pruebas, efectivamente era un error 502 solo en el caso del acceso móvil.
Como no hay versión móvil en segundo plano, modifiqué directamente el código fuente admin.php y añadí el siguiente código en la primera línea:
De esta manera, el programa siempre recibirá una solicitud de acceso desde el navegador del PC y no pasará por el código lógico de la versión móvil, ¡solucionado!
|