GDB Introduktion:
GDB är ett kraftfullt UNIX-program för felsökning som släppts av GNU Open Source Organization. Om du arbetar med UNIX-plattformen kommer du att upptäcka att GDB är ett felsökningsverktyg med kraftfullare funktioner än de grafiska felsökarna i VC och BCB.
utfärda
Miljö: Linux/PHP v5.5.7
När mobiltelefonen får tillgång till bakgrunden på denna sida, klicka på några sidor, och 502-felet kommer att visas, och du vill ta reda på vad som är den specifika orsaken till 502-felet.
PHP-FPM-felloggen är följande:
WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start
Kärnfil
Kärnfilen är egentligen en bild av minnet, som lagrar motsvarande information om minnet när programmet kraschar, och används främst för att felsöka programmet. När programmet kraschar genereras en kärnfil, faktiskt bör det sägas vara en core dump-fil, standardgenereringsplatsen är i samma katalog som det körbara programmet, filnamnet är core.***, där *** är ett visst nummer.
Befallning:
Kärnfilstorlek (block, -c) 0 Datastorlek (kbytes, -d) obegränsad Schemaläggningsprioritet (-e) 0 Filstorlek (block, -f) obegränsad Väntande signaler (-i) 7271 Max låst minne (kbytes, -l) 64 Max minnesstorlek (kbytes, -m) obegränsad öppna filer (-n) 65535 rörstorlek (512 byte, -p) 8 POSIX-meddelandeköer (bytes, -q) 819200 Realtidsprioritet (-R) 0 Stackstorlek (kbytes, -s) 8192 CPU-tid (sekunder, -t) obegränsad MAX användarprocesser (-u) 7271 Virtuellt minne (kbytes, -v) obegränsat fillås (-x) obegränsat Om kärnfilstorleken är 0 kan kärnfilen inte genereras, och vi måste ställa in den.
ulimit -c unlimited, det betyder att storleken på kärnfilen är obegränsad
Uppsättningen klar, kom ihågStarta om php-fpm-tjänsten, kommandot är följande:
Kontrollera felloggen igen, enligt följande:
[23 maj 2020 14:39:14] VARNING: [pool www] barn 2220 lämnade signal 11 (SIGSEGV - kärna dumpad) efter 7,255225 sekunder från start [23 maj 2020 14:39:14] MEDDELANDE: [pool www] barn 2231 påbörjades Om loggen innehåller orden "SIGSEGV – core dumped" betyder det att rore-filen har genererats framgångsrikt.
Kärnfilen kommer att genereras under webbplatskatalogen, om du inte vet det kan du också hitta kärnfilen med följande kommando:
Adressen som genereras av kärnan på min server är: /alidata/www/itsvse_web/core.2220
Installera gdb
Kommandot är följande:
GDB Debug PHP-FPM
Förbered .gdbinit-filen
.gdbinit-filen ligger under PHP-källkoden, och den måste vara konsekvent med den php-version du kör!
Min filadress: /root/sh-1.5.5/php-5.5.7/.gdbinit
Nedladdningsadressen till den senaste php-versionen av .gdbinit-filen:
Inloggningen med hyperlänken är synlig.
gdb för att öppna kärnfilen
I kärnfilskatalogen, kör följande kommando:
[root@o itsvse_web]# GDB php-fpm -c core.2220 GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7 Upphovsrätt (C) 2013 Free Software Foundation, Inc. Licens GPLv3+: GNU GPL version 3 eller senare <Inloggningen med hyperlänken är synlig. Detta är fri programvara: du är fri att ändra och distribuera den. Det finns INGEN GARANTI, i den utsträckning lagen tillåter. Skriv "visa kopiering" och "Visa garanti" för detaljer. Denna GDB konfigurerades som "x86_64-redhat-linux-gnu". För instruktioner för buggrapportering, se: <Inloggningen med hyperlänken är synlig. Att läsa symboler från /alidata/server/php-5.5.7/sbin/php-fpm... Klart. [Ny LWP 2220] [Trådfelsökning med libthread_db aktiverat] Använder värd libthread_db biblioteket "/lib64/libthread_db.so.1". Core genererades av 'php-fpm: pool www'. Programmet avslutades med signal 11, segmenteringsfel. #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 { Saknar separata debuginfos, använd: 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 något i stil med följande ord:
Core genererades av 'php-fpm: pool www'. Programmet avslutades med signal 11, segmenteringsfel. bt(backtrace): Listar anropsstacken
(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 (tillstånd=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å igenom exittråden
Introduktion av .gdbinit (gdb-kommandoskript) som tillhandahålls i PHP-källkoden
Titta på zbacktrace- och variabelvärdena
(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) sträng(33): "/admin.php?action=index&mobile=no" } (gdb) Lösning
Jag såg faktiskt inga fel, men det var uppenbart från loggarna att det fanns ett problem med mobilåtkomsten, och efter testning var det faktiskt ett 502-fel endast i fallet med mobilåtkomst.
Eftersom det inte finns någon mobilversion i bakgrunden modifierade jag direkt admin.php källkod och lade till följande kod på första raden:
På så sätt får programmet alltid en åtkomstförfrågan från PC-webbläsaren, och det går inte igenom den logiska koden för mobiltelefonversionen, löst!
|