Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 8079|Atbildi: 0

Izmantojiet gdb, lai atkļūdotu php-fpm izņēmuma kļūdu

[Kopēt saiti]
Publicēts 23.05.2020 17:54:01 | | | |
GDB ievads:

GDB ir spēcīgs UNIX programmu atkļūdošanas rīks, ko izlaidusi GNU atvērtā koda organizācija. Ja strādājat pie UNIX platformas, jūs atradīsit, ka GDB ir atkļūdošanas rīks, kuram ir jaudīgākas funkcijas nekā VC un BCB grafiskie atkļūdotāji.

jautājums

Vide: Linux / PHP v5.5.7

Kad mobilais tālrunis piekļūst šīs vietnes fonam, noklikšķiniet uz dažām lapām, un parādīsies 502 kļūda, un jūs vēlaties uzzināt, kāds ir konkrētais 502 kļūdas iemesls.

PHP-FPM kļūdu žurnāls ir šāds:

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

Pamatfails

Pamata fails faktiski ir atmiņas attēls, kas saglabā atbilstošo atmiņas informāciju, kad programma avārijas, un to galvenokārt izmanto, lai atkļūdotu programmu. Kad programma avarē, tiks ģenerēts pamata fails, patiesībā tas ir pamata izgāztuves fails, noklusējuma ģenerēšanas vieta ir tajā pašā direktorijā kā izpildāmā programma, faila nosaukums ir kodols.***, kur *** ir noteikts skaitlis.

Pavēlēt:

Pamata faila lielums (bloki, -c) 0
Data Seg Size (KBytes, -D) Neierobežots
Plānošanas prioritāte (-e) 0
Faila lielums (bloki, -f) neierobežots
gaida signālus (-i) 7271
Maksimālā bloķētā atmiņa (KB, -L) 64
Maksimālais atmiņas lielums (KBaiti, -M) Neierobežots
Atvērt failus (-N) 65535
Caurules izmērs (512 baiti, -p) 8
POSIX ziņojumu rindas (baiti, -q) 819200
Reāllaika prioritāte (-R) 0
Steka lielums (KB, -s) 8192
CPU laiks (sekundes, -t) neierobežots
maksimālais lietotāja process (-u) 7271
Virtuālā atmiņa (KB, -V) Neierobežota
Failu bloķēšana (-x) neierobežota

Ja pamata faila lielums ir 0, pamata failu nevar ģenerēt, un mums tas ir jāiestata.

ulimit -c neierobežots, tas nozīmē, ka pamata faila lielums ir neierobežots


Iestatīšana pabeigta, atcerietiesRestartējiet php-fpm pakalpojumu, komanda ir šāda:



Vēlreiz pārbaudiet kļūdu žurnālu, kā norādīts tālāk.

[2020. gada 23. maijs 14:39:14] BRĪDINĀJUMS: [baseins www] bērns 2220 izgāja no signāla 11 (SIGSEGV - kodols izgāzts) pēc 7.255225 sekundēm no sākuma
[2020. gada 23. maijs 14:39:14] PAZIŅOJUMS: [baseins www] bērns 2231 sāka

Ja žurnālā ir vārdi "SIGSEGV – core dumped", tas nozīmē, ka rore fails ir veiksmīgi ģenerēts.

Pamata fails tiks ģenerēts vietnes direktorijā, ja nezināt, varat atrast arī pamata failu ar šādu komandu:


Mana servera kodola ģenerētā adrese ir: /alidata/www/itsvse_web/core.2220

Instalējiet gdb

Komanda ir šāda:



GDB atkļūdošana PHP-FPM

.gdbinit faila sagatavošana

.gdbinit fails atrodas zem PHP avota koda, un tam ir jāatbilst jūsu izmantotajai php versijai!

Mana faila adrese: /root/sh-1.5.5/php-5.5.7/.gdbinit

Lejupielādes adrese jaunāko php versiju .gdbinit failu:

Hipersaites pieteikšanās ir redzama.

gdb, lai atvērtu pamata failu

Pamata failu direktorijā palaidiet šādu komandu:

[root@o itsvse_web]# gdb php-fpm -c kodols.2220
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7
Autortiesības (C) 2013 Free Software Foundation, Inc.
Licence GPLv3+: GNU GPL versija 3 vai jaunāka <Hipersaites pieteikšanās ir redzama.
Tā ir bezmaksas programmatūra: jūs varat to brīvi mainīt un izplatīt.
NAV GARANTIJAS, ciktāl to pieļauj likums.  Ierakstiet "rādīt kopēšanu"
un "Rādīt garantiju", lai iegūtu sīkāku informāciju.
Šis GDB tika konfigurēts kā "x86_64-redhat-linux-gnu".
Norādījumus par kļūdu ziņošanu, lūdzu, skatiet:
<Hipersaites pieteikšanās ir redzama.
Simbolu lasīšana no /alidata/server/php-5.5.7/sbin/php-fpm... gatavs.
[Jaunais LWP 2220]
[Pavedienu atkļūdošana, izmantojot libthread_db iespējotu]
Izmantojot resursdatora libthread_db bibliotēku "/lib64/libthread_db.so.1".
Kodolu ģenerēja 'php-fpm: baseins www'.
Programma pārtraukta ar signālu 11, segmentācijas kļūme.
#0 tsrm_realpath_r (
    path=path@entry=0x7ffdd9ebf100 "/alidata/www/itsvse_web/./source/language/mobile/lang_template.php",
    sākums=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)
    pie /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751
751        {
Trūkst atsevišķu debuginfos, izmantojiet: 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

Jūs varat redzēt kaut ko līdzīgu šādiem vārdiem:

Kodolu ģenerēja 'php-fpm: baseins www'.
Programma pārtraukta ar signālu 11, segmentācijas kļūme.

bt(backtrace): uzskaita zvanu kaudzi

(gdb) bt
#0 tsrm_realpath_r (
    path=path@entry=0x7ffdd9ebf100 "/alidata/www/itsvse_web/./source/language/mobile/lang_template.php",
    sākums=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)
    pie /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751
#1 0x000000000075209a virtual_file_ex (state=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)
    pie /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") pie /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c :1954



Izejas pavediena pārskatīšana


Iepazīstinām ar .gdbinit (gdb komandu skriptēšanu), kas nodrošināts PHP avota kodā



Apskatiet zbacktrace un mainīgās vērtības

(gdb) zbacktrace
[0xed9f8f0] lang() /alidata/www/itsvse_web/source/function/function_core.php:444
[0xed9e2e8] lang("kodols", "title_board_message") /alidata/www/itsvse_web/source/function/function_message.php:43
[0xed9a988] dshowmessage("mobile_template_no_found", "", masīvs(1)[0xec46a28], masīvs(0)[0xec46bc0], 0) /alidata/www/itsvse_web/source/function/function_core.php:1426
[0xed9a6d8] showmessage("mobile_template_no_found", "", masīvs(1)[0xec46a28]) /alidata/www/itsvse_web/source/function/function_core.php:618
[0xed97638] veidne("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82
[0x7ffdd9ec3e50] plugin_dsu_amupper->global_footer(masīvs(0)[0xec40028])
[0xed97080] call_user_func(masīvs(2)[0xed6b8b0], masīvs(0)[0xec40028]) /alidata/www/itsvse_web/source/function/function_core.php:1177
[0xed954b8] hookscript("globāls", "globāls") /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", "", masīvs(1)[0xec40c10], masīvs(0)[0xec76d40], 0) /alidata/www/itsvse_web/source/function/function_core.php:1426
[0xed90dd8] showmessage("mobile_template_no_found", "", masīvs(1)[0xec40c10]) /alidata/www/itsvse_web/source/function/function_core.php:618
[0xed8dd38] veidne("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82
[0x7ffdd9ec49a0] plugin_dsu_amupper->global_footer(masīvs(0)[0xec39ab0])
[0xed8d780] call_user_func(masīvs(2)[0xeb833e8], masīvs(0)[0xec39ab0]) /alidata/www/itsvse_web/source/function/function_core.php:1177
[0xed8bbb8] hookscript("globāls", "globāls") /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", "", masīvs(1)[0xecc0fe0], masīvs(0)[0xec76718], 0) /alidata/www/itsvse_web/source/function/function_core.php:1426
[0xed64f00] showmessage("mobile_template_no_found", "", masīvs(1)[0xecc0fe0]) /alidata/www/itsvse_web/source/function/function_core.php:618
[0xed61e60] veidne("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82
[0x7ffdd9ec54f0] plugin_dsu_amupper->global_footer(masīvs(0)[0xeb834f8])

(gdb) drukāt ((zval *)0xec46a28)
$1 = (zval *) 0xec46a28
(GDB) printzv $ 1
[0xec46a28] (refcount=5) masīvs(1): {
    "url\0" => [0xecb2fb0] (refcount=2) string(33): "/admin.php?action=index&mobile=no"
  }
(GDB)
Šķīdums

Es faktiski neredzēju nekādas kļūdas, bet no žurnāliem bija acīmredzams, ka ir problēma ar mobilo piekļuvi, un pēc testēšanas tā patiešām bija 502 kļūda tikai mobilās piekļuves gadījumā.

Tā kā fonā nav mobilās versijas, es tieši modificēju admin.php avota kodu un pirmajā rindā pievienoju šādu kodu:

Tādā veidā programma vienmēr saņems piekļuves pieprasījumu no datora pārlūkprogrammas, un tā netiks atrisināta caur mobilā tālruņa versijas loģisko kodu!




Iepriekšējo:Nginx pielāgo 404 kļūdas lapu un atgriež 200 statusa koda risinājumu
Nākamo:[ngClass] un [ngStyle] pamata izmantošana Angular
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com