Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 7943|Svare: 0

Bruk gdb for å feilsøke php-fpm-unntaksfeil

[Kopier lenke]
Publisert på 23.05.2020 17:54:01 | | | |
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!




Foregående:Nginx tilpasser 404-feilsiden og returnerer en 200-statuskodeløsning
Neste:Grunnleggende bruk av [ngKlasse] og [ngStil] i Angular
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com