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!
|