GDB Introduksjon:
GDB er et kraftig UNIX-programfeilsøkingsverktøy utgitt av GNU Open Source Organization. Hvis du jobber med UNIX-plattformen, vil du oppdage at GDB er et feilsøkingsverktøy som har kraftigere funksjoner enn de grafiske feilsøkerne i VC og BCB.
utstede
Miljø: Linux/PHP v5.5.7
Når mobiltelefonen får tilgang til bakgrunnen på dette nettstedet, klikk på noen sider, og 502-feilen vil vises, og du vil finne ut hva som er den spesifikke årsaken til 502-feilen.
PHP-FPM feillogg er som følger:
WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start
Kjernefil
Kjernefilen er faktisk et bilde av minnet, som lagrer den tilsvarende informasjonen om minnet når programmet krasjer, og brukes hovedsakelig til å feilsøke programmet. Når programmet krasjer, vil en kjernefil bli generert, faktisk bør det sies å være en kjerne-dumpfil, standard genereringssted er i samme mappe som det kjørbare programmet, filnavnet er core.***, hvor *** er et visst tall.
Kommando:
Kjernefilstørrelse (blokker, -c) 0 Data Seg-størrelse (kbyte, -d) Ubegrenset Planleggingsprioritet (-e) 0 Filstørrelse (blokker, -f) Ubegrenset Ventende signaler (-i) 7271 Maks låst minne (kbytes, -l) 64 Maksimal minnestørrelse (kbytes, -m) Ubegrenset åpne filer (-n) 65535 pipestørrelse (512 byte, -p) 8 POSIX-meldingskøer (bytes, -q) 819200 Sanntidsprioritet (-R) 0 Stabelstørrelse (kbytes, -s) 8192 CPU-tid (sekunder, -t) ubegrenset Max brukerprosesser (-u) 7271 Virtuelt minne (kbytes, -v) ubegrenset fillåser (-x) ubegrenset Hvis kjernefilstørrelsen er 0, kan ikke kjernefilen genereres, og vi må sette den.
ulimit -c unlimited, det betyr at størrelsen på kjernefilen er ubegrenset
Oppsett fullført, huskStart php-fpm-tjenesten på nytt, kommandoen er som følger:
Sjekk feilloggen igjen, som følger:
[23. mai 2020 14:39:14] ADVARSEL: [pool www] barn 2220 forlot signal 11 (SIGSEGV - kjerne dumpet) etter 7,255225 sekunder fra start [23. mai 2020 14:39:14] VARSEL: [basseng www] barn 2231 startet Hvis loggen inneholder ordene "SIGSEGV – core dumped", betyr det at rore-filen er blitt generert med suksess.
Kjernefilen vil bli generert under nettsidekatalogen, hvis du ikke vet det, kan du også finne kjernefilen med følgende kommando:
Adressen som genereres av kjernen på serveren min er: /alidata/www/itsvse_web/core.2220
Installer gdb
Kommandoen er som følger:
GDB Debug PHP-FPM
Forbered .gdbinit-filen
.gdbinit-filen ligger under PHP-kildekoden, og den må være konsistent med PHP-versjonen du kjører!
Min filadresse: /root/sh-1.5.5/php-5.5.7/.gdbinit
Nedlastingsadressen til den nyeste php-versjonen av .gdbinit-filen:
Innloggingen med hyperkoblingen er synlig.
gdb for å åpne kjernefilen
I kjernefilkatalogen, kjør følgende kommando:
[root@o itsvse_web]# gdb php-fpm -c core.2220 GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7 Opphavsrett (C) 2013 Free Software Foundation, Inc. Lisens GPLv3+: GNU GPL versjon 3 eller nyere <Innloggingen med hyperkoblingen er synlig. Dette er fri programvare: du står fritt til å endre og distribuere den. Det finnes INGEN GARANTI, i den grad loven tillater det. Skriv "vis kopiering" og "vis garanti" for detaljer. Denne GDB-en ble konfigurert som "x86_64-redhat-linux-gnu". For instruksjoner for feilrapportering, se: <Innloggingen med hyperkoblingen er synlig. Leser symboler fra /alidata/server/php-5.5.7/sbin/php-fpm... Ferdig. [Ny LWP 2220] [Trådfeilsøking med libthread_db aktivert] Ved å bruke vertsbiblioteket libthread_db "/lib64/libthread_db.so.1". Core ble generert av 'php-fpm: pool www'. Programmet avsluttet med signal 11, segmenteringsfeil. #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) på /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751 751 { Mangler separate debuginfos, bruk: 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 Du kan se noe som følgende ord:
Core ble generert av 'php-fpm: pool www'. Programmet avsluttet med signal 11, segmenteringsfeil. bt(backtrace): Viser kallstakken
(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) på /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751 #1 0x000000000075209a i virtual_file_ex (tilstand=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) på /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:1292 #2 0x000000000075308c i 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") på /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c :1954
Gå gjennom exit-tråden
Introduksjon av .gdbinit (gdb-kommandoskripting) levert i PHP-kildekoden
Se på zbacktrace- og variabelverdiene
(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("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] 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("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] 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) Skriv ut ((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) Løsning
Jeg så faktisk ingen feil, men det var åpenbart fra loggene at det var et problem med mobiltilgangen, og etter testing var det faktisk en 502-feil kun i tilfellet mobiltilgang.
Siden det ikke finnes noen mobilversjon i bakgrunnen, modifiserte jeg direkte admin.php-kildekoden og la til følgende kode på første linje:
På denne måten vil programmet alltid få en tilgangsforespørsel fra PC-nettleseren, og det vil ikke gå gjennom den logiske koden til mobiltelefonversjonen, løst!
|