GDB Introductie:
GDB is een krachtig UNIX-programma-debugging-instrument dat is uitgebracht door de GNU Open Source Organization. Als je op het UNIX-platform werkt, zul je merken dat GDB een debuggingtool is met krachtigere functies dan de grafische debuggers van VC en BCB.
uitgeven
Omgeving: Linux/PHP v5.5.7
Wanneer de mobiele telefoon toegang krijgt tot de achtergrond van deze site, klik dan op enkele pagina's, en dan verschijnt de 502-fout, en je wilt weten wat de specifieke reden is voor de 502-fout.
PHP-FPM foutlogboek is als volgt:
WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start
Kernbestand
Het kernbestand is eigenlijk een afbeelding van het geheugen, die de bijbehorende informatie van het geheugen opslaat wanneer het programma crasht, en wordt voornamelijk gebruikt om het programma te debuggen. Wanneer het programma crasht, wordt er een core-bestand gegenereerd; in feite moet het een core dump-bestand zijn, de standaard generatielocatie bevindt zich in dezelfde map als het uitvoerbare programma, de bestandsnaam is core.***, waarbij *** een bepaald getal is.
Bevelen:
Kernbestandsgrootte (blokken, -c) 0 Data Seg Size (kbytes, -d) Onbeperkt planningsprioriteit (-e) 0 Bestandsgrootte (blokken, -f) onbeperkt Wachtende signalen (-i) 7271 Max Locked Memory (kbytes, -L) 64 Maximale geheugengrootte (kbytes, -m) onbeperkt open bestanden (-n) 65535 pijpgrootte (512 bytes, -p) 8 POSIX-berichtwachtrijen (bytes, -q) 819200 Real-time prioriteit (-R) 0 Stackgrootte (kbytes, -s) 8192 CPU-tijd (seconden, -t) onbeperkt Max User Processes (-u) 7271 Virtueel geheugen (kbytes, -v) onbeperkt Bestandsvergrendelingen (-x) onbeperkt Als de kernbestandsgrootte 0 is, kan het kernbestand niet worden gegenereerd en moeten we het instellen.
ulimit -c unlimited, betekent dat de grootte van het kernbestand onbeperkt is
Installatie voltooid, onthoudHerstart de php-fpm-dienst, het commando is als volgt:
Controleer het foutlogboek opnieuw, als volgt:
[23-mei-2020 14:39:14] WAARSCHUWING: [pool www] kind 2220 verliet signaal 11 (SIGSEGV - kern gedumpt) na 7,255225 seconden vanaf start [23-mei-2020 14:39:14] OPMERKING: [zwembad www] kind 2231 gestart Als het logboek de woorden "SIGSEGV – core dumped" bevat, betekent dit dat het rore-bestand succesvol is gegenereerd.
Het kernbestand wordt gegenereerd onder de websitemap, als je het niet weet, kun je het kernbestand ook vinden met het volgende commando:
Het adres dat door de core van mijn server wordt gegenereerd is: /alidata/www/itsvse_web/core.2220
Installeer gdb
Het commando is als volgt:
GDB debug php-fpm
Bereid het .gdbinit-bestand voor
Het .gdbinit-bestand staat onder de PHP-broncode en moet consistent zijn met de PHP-versie die je gebruikt!
Mijn bestandsadres: /root/sh-1.5.5/php-5.5.7/.gdbinit
Downloadadres van de nieuwste php-versie van het .gdbinit-bestand:
De hyperlink-login is zichtbaar.
GDB om het kernbestand te openen
Voer in de kernbestandsmap het volgende commando uit:
[root@o itsvse_web]# GDB php-fpm -c core.2220 GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7 Copyright (C) 2013 Free Software Foundation, Inc. Licentie GPLv3+: GNU GPL versie 3 of later <De hyperlink-login is zichtbaar. Dit is vrije software: je bent vrij om het te wijzigen en te herverspreiden. Er is GEEN GARANTIE, voor zover wettelijk toestaat. Typ "show copying" en "toon garantie" voor details. Deze GDB was geconfigureerd als "x86_64-redhat-linux-gnu". Voor instructies voor bugrapportage, zie: <De hyperlink-login is zichtbaar. Symbolen lezen van /alidata/server/php-5.5.7/sbin/php-fpm... Klaar. [Nieuwe LWP 2220] [Thread debuggaat met libthread_db ingeschakeld] Host libthread_db bibliotheek "/lib64/libthread_db.so.1" gebruiken. Core werd gegenereerd door 'php-fpm: pool www '. Programma beëindigd met signaal 11, segmentatiefout. #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) op /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751 751 { Ontbrekende aparte debuginfos, gebruik: 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 Je kunt iets zien als de volgende woorden:
Core werd gegenereerd door 'php-fpm: pool www '. Programma beëindigd met signaal 11, segmentatiefout. bt(backtrace): Geeft de call stack weer op
(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) op /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751 #1 0x000000000075209a in virtual_file_ex (staat=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) op /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:1292 #2 0x000000000075308c in 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") op /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c :1954
Bekijk de exitthread
Introductie van .gdbinit (gdb-commandoscripting) die in de PHP-broncode wordt geleverd
Kijk naar de zbacktrace- en variabelewaarden
(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] template("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82 [0x7ffdd9ec3e50] plugin_dsu_amupper->global_footer(array(0)[0xec40028]) [0xed97080] call_user_func(array(2)[0xed6b8b0], array(0)[0xec40028]) /alidata/www/itsvse_web/source/function/function_core.php:1177 [0xed954b8] hookscript("globaal", "globaal") /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] template("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82 [0x7ffdd9ec49a0] plugin_dsu_amupper->global_footer(array(0)[0xec39ab0]) [0xed8d780] call_user_func(array(2)[0xeb833e8], array(0)[0xec39ab0]) /alidata/www/itsvse_web/source/function/function_core.php:1177 [0xed8bbb8] hookscript("globaal", "globaal") /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] template("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82 [0x7ffdd9ec54f0] plugin_dsu_amupper->global_footer(array(0)[0xeb834f8])
(GDB) Print ((ZVAL *)0xec46a28) $1 = (zval *) 0xec46a28 (GDB) printZV $1 [0xec46a28] (refcount=5) array(1): { "url\0" => [0xecb2fb0] (refcount=2) string(33): "/admin.php?action=index&mobile=no" } (gdb) Oplossing
Ik zag eigenlijk geen fouten, maar uit de logs was duidelijk dat er een probleem was met de mobiele toegang, en na testen bleek het inderdaad alleen een 502-fout te zijn in het geval van mobiele toegang.
Omdat er geen mobiele versie op de achtergrond is, heb ik direct de broncode van admin.php aangepast en de volgende code toegevoegd aan de eerste regel:
Op deze manier ontvangt het programma altijd een toegangsverzoek van de pc-browser, en het gaat niet door de logische code van de mobiele telefoonversie, opgelost!
|