See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 7943|Vastuse: 0

Kasuta gdb-d, et siluda php-fpm erandiviga

[Kopeeri link]
Postitatud 23.05.2020 17:54:01 | | | |
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!




Eelmine:Nginx kohandab 404 vealehte ja tagastab 200 olekukoodi lahenduse
Järgmine:[ngClass] ja [ngStyle] põhiline kasutus Angularis
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com