GDB Johdanto:
GDB on tehokas UNIX-ohjelman virheenkorjaustyökalu, jonka on julkaissut GNU Open Source Organization. Jos työskentelet UNIX-alustan parissa, huomaat, että GDB on virheenkorjaustyökalu, jolla on tehokkaammat toiminnot kuin VC:n ja BCB:n graafiset debuggaajat.
ongelma
Ympäristö: Linux/PHP v5.5.7
Kun matkapuhelin pääsee tämän sivuston taustalle, klikkaa joitakin sivuja, niin 502-virhe ilmestyy, ja haluat selvittää, mikä on tarkka syy 502-virheeseen.
PHP-FPM-virheloki on seuraava:
WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start
Ydintiedosto
Ydintiedosto on itse asiassa muistin kuva, joka tallentaa muistin vastaavat tiedot ohjelman kaatuessa, ja sitä käytetään pääasiassa ohjelman virheenkorjaukseen. Kun ohjelma kaatuu, core-tiedosto syntyy, itse asiassa sitä pitäisi sanoa core dump -tiedostoksi, oletusgeneraattorin sijainti on samassa hakemistossa suoritettavan ohjelman kanssa, tiedoston nimi on core.***, missä *** on tietty luku.
Komento:
Ydintiedoston koko (lohkot, -c) 0 Datan seg-koko (ktavut, -d) rajaton aikataulutuksen prioriteetti (-e) 0 tiedostokoko (lohkot, -f) rajaton Odottavat signaalit (-i) 7271 Maksimilukittu muisti (ktavut, -l) 64 maksimimuistikoko (ktavut, -m) rajaton Avoimet tiedostot (-n) 65535 putken koko (512 tavua, -p) 8 POSIX-viestijonot (tavut, -q) 819200 reaaliaikainen prioriteetti (-r) 0 pinon koko (ktavut, -s) 8192 suorittimen aika (sekunteja, -t) rajaton Max User Processes (-U) 7271 virtuaalimuisti (ktavut, -v) rajaton Tiedostolukitukset (-X) rajoittamattomat Jos ydintiedoston koko on 0, ydintiedostoa ei voi generoida, ja se täytyy asettaa.
ulimit -c unlimited, se tarkoittaa, että ydintiedoston koko on rajaton
Asennus valmis, muistaKäynnistä php-fpm -palvelu uudelleen, komento on seuraava:
Tarkista virheloki uudelleen seuraavasti:
[23.5.2020 14:39:14] VAROITUS: [allas www] lapsi 2220 poistui signaalista 11 (SIGSEGV - ydin poistettu) 7.255225 sekunnin jälkeen käynnistyksestä [23.5.2020 14:39:14] ILMOITUS: [uima-allas www] lapsi 2231 aloitti Jos lokissa on sanat "SIGSEGV – core dumped", se tarkoittaa, että rore-tiedosto on onnistuneesti luotu.
Ydintiedosto luodaan verkkosivustohakemistossa, jos et tiedä, voit myös löytää ydintiedoston seuraavalla komennolla:
Palvelimeni ytimen generoima osoite on: /alidata/www/itsvse_web/core.2220
Asenna gdb
Käsky on seuraava:
gdb debug php-fpm
Valmistele .gdbinit-tiedosto
.gdbinit-tiedosto on PHP-lähdekoodin alla, ja sen täytyy olla johdonmukainen käyttämäsi PHP-version kanssa!
Tiedostoosoitteeni: /root/sh-1.5.5/php-5.5.7/.gdbinit
Lataa viimeisimmän .gdbinit-tiedoston PHP-version osoite:
Hyperlinkin kirjautuminen on näkyvissä.
gdb avaamaan ydintiedoston
Ydintiedostohakemistossa suorita seuraava komento:
[root@o itsvse_web]# gdb php-fpm -c core.2220 GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7 Tekijänoikeus (C) 2013 Free Software Foundation, Inc. Lisenssi GPLv3+: GNU GPL versio 3 tai uudempi <Hyperlinkin kirjautuminen on näkyvissä. Tämä on vapaata ohjelmistoa: voit muuttaa ja jakaa sitä uudelleen. Takuuta ei ole olemassa, siinä määrin kuin laki sallii. Kirjoita "näytä kopiointi" ja "näytä takuu" yksityiskohtia varten. Tämä GDB oli konfiguroitu muotoon "x86_64-redhat-linux-gnu". Bugiraportointiohjeet löytyvät: <Hyperlinkin kirjautuminen on näkyvissä. Symbolien lukeminen /alidata/server/php-5.5.7/sbin/php-fpm... Valmis. [Uusi LWP 2220] [Säikeiden debuggaus käyttäen libthread_db käytössä] Käyttäen isäntä libthread_db kirjastoa "/lib64/libthread_db.so.1". Core generoitiin 'php-fpm: pool www' -menetelmällä. Ohjelma päättyi signaaliin 11, segmentointivirhe. #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) osoitteessa /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751 751 { Erilliset debuginfot puuttuvat, käytä: 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 Voit nähdä esimerkiksi seuraavat sanat:
Core generoitiin 'php-fpm: pool www' -menetelmällä. Ohjelma päättyi signaaliin 11, segmentointivirhe. bt(backtrace): Listaa kutsupinon
(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) osoitteessa /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751 #1 0x000000000075209a virtual_file_ex (tila=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) osoitteessa /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") osoitteessa /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c :1954
Tarkista poistumisketju
Esittely .gdbinit (gdb-komentoskripti), joka sisältyy PHP-lähdekoodiin
Katso zbacktrace- ja muuttujaarvoja
(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("globaali", "globaali") /alidata/www/itsvse_web/source/function/function_core.php:1214 [0xed95218] hookscriptoutput("näyttöviesti") /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(taulukko(0)[0xec39ab0]) [0xed8d780] call_user_func(array(2)[0xeb833e8], array(0)[0xec39ab0]) /alidata/www/itsvse_web/source/function/function_core.php:1177 [0xed8bbb8] hookscript("globaali", "globaali") /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) tulosta ((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) Ratkaisu
En itse asiassa nähnyt virheitä, mutta lokeista oli selvää, että mobiilikäytössä oli ongelma, ja testauksen jälkeen kyseessä oli 502-virhe vain mobiilikäytössä.
Koska taustalla ei ole mobiiliversiota, muokkasin suoraan admin.php lähdekoodia ja lisäsin seuraavan koodin ensimmäiselle riville:
Näin ohjelma saa aina pääsypyynnön PC-selaimesta, eikä se kulje matkapuhelinversion loogisen koodin läpi, ratkaistu!
|