GDB sissejuhatus:
GDB on võimas UNIX programmi silumistööriist, mille on välja andnud GNU avatud lähtekoodiga organisatsioon. Kui töötad UNIX platvormil, leiad, et GDB on silumistööriist, millel on võimsamad funktsioonid kui VC ja BCB graafilised silurid.
Küsimus
Keskkond: Linux/PHP v5.5.7
Kui mobiiltelefon pääseb selle saidi taustale, klõpsa mõnel lehel ja ilmub 502 viga ning sa tahad teada saada, mis on 502 vea konkreetne põhjus.
PHP-FPM vealogi on järgmine:
WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start
Põhifail
Põhifail on tegelikult mälu kujutis, mis salvestab vastava mälu info programmi kokkujooksmise korral ning mida kasutatakse peamiselt programmi silumiseks. Kui programm kokku jookseb, genereeritakse tuumafail, tegelikult tuleks öelda, et see on core dump fail, vaikimisi generatsioonikoht on samas kaustas kui täidetav programm, failinimi on core.***, kus *** on kindel number.
Käsk:
Põhifaili suurus (plokid, -c) 0 Andmeseg suurus (kbaiti, -d) piiramatu ajastamise prioriteet (-e) 0 failisuurus (plokid, -f) piiramatu Ootel signaalid (-i) 7271 maksimaalne lukustatud mälu (kbaiti, -l) 64 maksimaalne mälumaht (kbaiti, -m) piiramatu avatud failid (-n) 65535 toru suurus (512 baiti, -p) 8 POSIX sõnumijärjekorrad (baidid, -q) 819200 reaalajas prioriteet (-r) 0 virna suurus (kbaiti, -s) 8192 protsessori aeg (sekundid, -t) piiramatu Max User Processes (-U) 7271 virtuaalmälu (kbaitid, -v) piiramatu Faililukud (-x) piiramatu Kui tuumafaili suurus on 0, ei saa tuumafaili genereerida ja peame selle seadistama.
ulimit -c piiramatult, tähendab, et põhifaili suurus on piiramatu
Seadistamine lõpetatud, mäletaTaaskäivita php-fpm teenus, käsk on järgmine:
Kontrolli vealogi uuesti, järgmiselt:
[23. mai 2020 14:39:14] HOIATUS: [bassein www] laps 2220 väljus signaalil 11 (SIGSEGV - tuum eemaldatud) pärast 7,255225 sekundit algusest [23. mai 2020 14:39:14] TEADE: [bassein www] laps 2231 alustas Kui logis on sõnad "SIGSEGV – core dumped", tähendab see, et rore-fail on edukalt genereeritud.
Põhifail genereeritakse veebikataloogi all, kui sa ei tea, leiad tuumafaili ka järgmise käsu abil:
Minu serveri tuum genereerib aadressi: /alidata/www/itsvse_web/core.2220
Paigalda gdb
Käsk on järgmine:
GDB silumine php-fpm
Valmista ette .gdbinit fail
.gdbinit fail asub PHP lähtekoodis ja peab olema kooskõlas PHP versiooniga, mida sa kasutad!
Minu failiaadress: /root/sh-1.5.5/php-5.5.7/.gdbinit
Laadige alla .gdbinit faili uusima php versiooni aadress:
Hüperlingi sisselogimine on nähtav.
GDB põhifaili avamiseks
Põhifaili kataloogis käivita järgmine käsk:
[root@o itsvse_web]# gdb php-fpm -c core.2220 GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7 Autoriõigus (C) 2013 Free Software Foundation, Inc. Litsents GPLv3+: GNU GPL versioon 3 või uuem <Hüperlingi sisselogimine on nähtav. See on vaba tarkvara: sul on vabadus seda muuta ja ümber levitada. EI OLE GARANTIID, nii palju kui seadus lubab. Kirjuta "näita kopeerimist" ja "näita garantiid" detailide jaoks. See GDB oli konfigureeritud kui "x86_64-redhat-linux-gnu". Vigade teatamise juhiste saamiseks vaata palun: <Hüperlingi sisselogimine on nähtav. Sümbolite lugemine /alidata/server/php-5.5.7/sbin/php-fpm... Tehtud. [Uus LWP 2220] [Lõime silumine, kasutades libthread_db lubatud] Kasutades hosti libthread_db teeki "/lib64/libthread_db.so.1". Core genereeris 'php-fpm: pool www'. Programm lõpetatud signaaliga 11, segmenteerimisviga. #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) aadressil /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751 751 { Puuduvad eraldi silumisandmed, kasuta: 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 Näete midagi sellist nagu järgmised sõnad:
Core genereeris 'php-fpm: pool www'. Programm lõpetatud signaaliga 11, segmenteerimisviga. bt(backtrace): Loetleb kõnepinu
(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) aadressil /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751 #1 0x000000000075209a virtual_file_ex (olek=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) aadressil /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:1292 #2 0x000000000075308c 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") aadressil /root/sh-1.5.5/php-5.7/TSRM/tsrm_virtual_cwd.c :1954
Vaata üle väljumisteema
Tutvustame .gdbinit (gdb käsu skriptimist) PHP lähtekoodis
Vaata zbacktrace'i ja muutujate väärtusi
(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] mall("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82 [0x7ffdd9ec3e50] plugin_dsu_amupper->global_footer(massiiv(0)[0xec40028]) [0xed97080] call_user_func(array(2)[0xed6b8b0], array(0)[0xec40028]) /alidata/www/itsvse_web/source/function/function_core.php:1177 [0xed954b8] hookscript("globaalne", "globaalne") /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("globaalne", "globaalne") /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) trükk ((zval *)0xec46a28) $1 = (zval *) 0xec46a28 (GBB) printzv $1 [0xec46a28] (refcount=5) array(1): { "url\0" => [0xecb2fb0] (refcount=2) string(33): "/admin.php?action=index&mobile=no" } (gdb) Lahus
Ma tegelikult vigu ei näinud, kuid logidest oli selge, et mobiilijuurdepääsuga on probleem, ja pärast testimist oli see tõesti 502 viga ainult mobiilse ligipääsu puhul.
Kuna taustal mobiiliversiooni pole, muutsin otse admin.php lähtekoodi ja lisasin esimesele reale järgmise koodi:
Nii saab programm alati PC brauserist ligipääsutaotluse ja see ei lähe mobiiltelefoni versiooni loogilise koodi kaudu, lahendatud!
|