Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 7943|Válasz: 0

Használj gdb-t a php-fpm kivétel hiba debugálásához

[Linket másol]
Közzétéve 2020. 05. 23. 17:54:01 | | | |
GDB Bevezetés:

A GDB egy erős UNIX programhibakereső eszköz, amelyet a GNU Open Source szervezet adott ki. Ha az UNIX platformon dolgozol, azt fogod tapasztalni, hogy a GDB egy hibakereső eszköz, amelynek erősebb funkciói vannak, mint a VC és a BCB grafikus hibakeresői.

kiad

Környezet: Linux/PHP v5.5.7

Amikor a mobil eléri az oldal hátterét, kattints néhány oldalra, és megjelenik a 502-es hiba, és szeretnéd megtudni, mi a konkrét oka az 502-es hibának.

PHP-FPM hibanapló a következő:

WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start

Magfájl

A magfájl valójában a memória képe, amely tárolja a memória megfelelő információit, amikor a program összeomlik, és főként a program hibakeresésére szolgál. Amikor a program összeomlik, egy magfájl keletkezik, valójában azt kell mondani, hogy mag dump fájl, az alapértelmezett generálási hely ugyanabban a könyvtárban van, mint a futtatható program, a fájl neve core.***, ahol *** egy bizonyos szám.

Parancs:

Magfájl mérete (blokkok, -c) 0
Adat seg mérete (kbytes, -d) korlátlan
ütemezési prioritás (-e) 0
fájlméret (blokkok, -f) korlátlan
Függőben lévő jelzők (-i) 7271
maximális zárolt memória (kbyte, -l) 64
maximális memóriaméret (kbyte, -m) korlátlan
Megnyitott fájlok (-n) 65535
Csőméret (512 bájt, -p) 8
POSIX üzenetsorok (bájt, -q) 819200
valós idejű prioritás (-r) 0
Stack mérete (kbytes, -s) 8192
CPU idő (másodpercek, -t) korlátlan
maximális felhasználói folyamatok (-u) 7271
Virtuális memória (kbytes, -v) korlátlan
Fájlzárolások (-x) korlátlan

Ha a magfájl mérete 0, akkor a core fájl nem generálható, és be kell állítanunk.

ulimit -c korlátlan, ami azt jelenti, hogy a magfájl mérete korlátlan


A beállítás befejeződött, ne feledd.Indítsa újra a php-fpm szolgáltatást, a parancs a következő:



Ellenőrizze újra a hibanaplót, a következőként:

[2020. május 23. 14:39:14] FIGYELEM: [medence www] 2220-as gyermek kilépett a 11-es jelzésnél (SIGSEGV – mag ledobva) 7,255225 másodperccel a kezdéstől
[2020. május 23. 14:39:14] ÉRTESÍTÉS: [medence www] gyermek 2231 kezdődött

Ha a naplóban szerepel a "SIGSEGV – core dumped" felirat, az azt jelenti, hogy a rore fájlt sikeresen generálták.

A magfájlt a weboldal könyvtár alatt generáljuk, ha nem tudod, a magfájlt a következő parancsgal is megtalálhatod:


A szerverem magja által generált cím: /alidata/www/itsvse_web/core.2220

Telepítsd a gdb-t

A parancs a következő:



gdb debug php-fpm

Készítsd elő a .gdbinit fájlt

A .gdbinit fájl a PHP forráskód alatt van, és konzisztensnek kell lennie a futtatott php verzióval!

A fájlcímem: /root/sh-1.5.5/php-5.5.7/.gdbinit

A .gdbinit fájl legfrissebb php verziójának címe letöltése:

A hiperlink bejelentkezés látható.

GDB a magfájl megnyitásához

A core fájlkönyvtárban a következő parancsot futassuk le:

[root@o itsvse_web]# gdb php-fpm -c core.2220
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7
Szerzői jog (C) 2013 Free Software Foundation, Inc.
GPLv3+ licenc: GNU GPL 3-as verzió vagy újabb <A hiperlink bejelentkezés látható.
Ez szabad szoftver: szabadon módosíthatod és terjesztheted újra.
NINCS GARANCIA, amennyiben a törvény engedélyezi.  Írd be, hogy "show copying"
és "Show warranty" a részletekért.
Ez a GDB "x86_64-redhat-linux-gnu" formátumban volt beállítva.
Hibajelentési utasításokért kérjük, lásd:
<A hiperlink bejelentkezés látható.
Szimbólumok olvasása a /alidata/server/php-5.5.7/sbin/php-fpm formátumból... Kész.
[Új LWP 2220]
[Szál hibakeresése libthread_db engedélyezve]
Használva a "/lib64/libthread_db.so.1" libthread_db hosztoda könyvtárat.
A Core-t a 'php-fpm: pool www' generálta.
A program 11-es jelnél véget ért, szegmentációs hiba.
#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)
    at /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751
751        {
Különálló hibakeresések hiányoznak, használd: 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

Láthatod valami hasonlót, mint a következő szavak:

A Core-t a 'php-fpm: pool www' generálta.
A program 11-es jelnél véget ért, szegmentációs hiba.

bt(backtrace): Felsorolja a call stacket

(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)
    at /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751
#1 0x000000000075209a virtual_file_ex-ben (állapot=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)
    at /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") at /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c :1954



Nézd át a kilépési témát


Bevezetés a .gdbinit (gdb parancsszkript) a PHP forráskódban található



Nézd meg a zbacktrace és változó értékeket

(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(tömb(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) nyomtatás ((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)
Megoldás

Valójában nem láttam hibákat, de a naplókból egyértelmű volt, hogy a mobil hozzáféréssel van gond, és a tesztelés után valóban csak a mobil hozzáférés esetén 502-es hiba volt.

Mivel nincs mobil verzió a háttérben, közvetlenül módosítottam a admin.php forráskódot, és az első sorra a következő kódot tettem fel:

Így a program mindig kap hozzáférési kérelmet a PC böngészőjéből, és nem megy keresztül a mobiltelefonos verzió logikai kódján, megoldva!




Előző:A Nginx testreszabja a 404-es hibaoldalt, és egy 200-as állapotkódos megoldást ad vissza
Következő:A [ngClass] és [ngStyle] alapvető használata az Angularban
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com