GDB Introduktion:
GDB er et kraftfuldt UNIX-programfejlfindingsværktøj udgivet af GNU Open Source Organization. Hvis du arbejder på UNIX-platformen, vil du opdage, at GDB er et fejlsøgningsværktøj med mere kraftfulde funktioner end de grafiske debuggere i VC og BCB.
spørgsmål
Miljø: Linux/PHP v5.5.7
Når mobiltelefonen får adgang til baggrunden på dette site, klik på nogle sider, og 502-fejlen vil dukke op, og du vil gerne finde ud af, hvad den specifikke årsag til 502-fejlen er.
PHP-FPM fejllogen er som følger:
WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start
Kernefil
Kernefilen er faktisk et billede af hukommelsen, som gemmer den tilsvarende information om hukommelsen, når programmet crasher, og bruges hovedsageligt til at fejlfinde programmet. Når programmet crasher, vil en kernefil blive genereret, faktisk bør det siges at være en core dump-fil, standardgenereringsstedet er i samme mappe som det eksekverbare program, filnavnet er core.***, hvor *** er et bestemt tal.
Kommando:
Kernefilstørrelse (blokke, -c) 0 Data-Seg-størrelse (kbytes, -d) Ubegrænset Planlægningsprioritet (-e) 0 Filstørrelse (blokke, -f) ubegrænset Ventende signaler (-i) 7271 Max låst hukommelse (kbytes, -l) 64 Maksimal hukommelsesstørrelse (kbytes, -m) ubegrænset Åbn filer (-N) 65535 rørstørrelse (512 bytes, -p) 8 POSIX-beskedkøer (bytes, -q) 819200 Realtidsprioritet (-r) 0 Stakstørrelse (kbytes, -s) 8192 CPU-tid (sekunder, -t) ubegrænset MAX brugerprocesser (-u) 7271 Virtuel hukommelse (kbytes, -v) ubegrænset fillås (-x) ubegrænsede Hvis kernens filstørrelse er 0, kan kernefilen ikke genereres, og vi skal sætte den.
ulimit -c unlimited, det betyder, at størrelsen på kernefilen er ubegrænset
Opsætning fuldført, huskGenstart php-fpm-tjenesten, kommandoen er som følger:
Tjek fejlloggen igen som følger:
[23-maj-2020 14:39:14] ADVARSEL: [pool www] barn 2220 forlod signal 11 (SIGSEGV - kerne dumpet) efter 7,255225 sekunder fra start [23-maj-2020 14:39:14] MEDDELELSE: [pool www] barn 2231 startet Hvis loggen indeholder ordene "SIGSEGV – core dumped", betyder det, at rore-filen er blevet genereret med succes.
Kernefilen vil blive genereret under websitets mappe, hvis du ikke ved det, kan du også finde kernefilen med følgende kommando:
Adressen, der genereres af kernen på min server, er: /alidata/www/itsvse_web/core.2220
Installer gdb
Kommandoen er som følger:
GDB fejlfinding php-fpm
Forbered .gdbinit-filen
.gdbinit-filen ligger under PHP-kildekoden, og den skal være konsistent med den php-version, du kører!
Min filadresse: /root/sh-1.5.5/php-5.5.7/.gdbinit
Downloadadresse for den nyeste php-version af .gdbinit-filen:
Hyperlink-login er synlig.
GDB for at åbne kernefilen
I kernefilmappen skal du køre 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 Ophavsret (C) 2013 Free Software Foundation, Inc. Licens GPLv3+: GNU GPL version 3 eller senere <Hyperlink-login er synlig. Dette er fri software: du er fri til at ændre og distribuere den. Der er INGEN GARANTI, i det omfang loven tillader det. Skriv "vis kopiering" og "vis garanti" for detaljer. Denne GDB var konfigureret som "x86_64-redhat-linux-gnu". For instruktioner til fejlrapportering, se: <Hyperlink-login er synlig. At læse symboler fra /alidata/server/php-5.5.7/sbin/php-fpm... Færdig. [Ny LWP 2220] [Trådfejlfinding ved hjælp af libthread_db aktiveret] Brug af værtsbiblioteket libthread_db "/lib64/libthread_db.so.1". Core blev genereret af 'php-fpm: pool www '. Programmet afsluttes med signal 11, segmenteringsfejl. #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 debug-infos, brug: 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 noget i retning af følgende ord:
Core blev genereret af 'php-fpm: pool www '. Programmet afsluttes med signal 11, segmenteringsfejl. bt(backtrace): Viser kaldstakken
(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
Gennemgå exit-tråden
Introduktion af .gdbinit (gdb command scripting) leveret i PHP-kildekoden
Se på zbacktrace- og variabelværdierne
(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) 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) Opløsning
Jeg så faktisk ingen fejl, men det var tydeligt ud fra logfilerne, at der var et problem med mobiladgangen, og efter test var det faktisk kun en 502-fejl i tilfælde af mobiladgang.
Da der ikke er nogen mobilversion i baggrunden, ændrede jeg direkte admin.php kildekoden og tilføjede følgende kode på første linje:
På denne måde vil programmet altid modtage en adgangsanmodning fra PC-browseren, og det vil ikke gå igennem den logiske kode fra mobiltelefonversionen, løst!
|