GDB Girişi:
GDB, GNU Açık Kaynak Organizasyonu tarafından yayımlanan güçlü bir UNIX program hata ayıklama aracıdır. UNIX platformu üzerinde çalışıyorsanız, GDB'nin VC ve BCB'nin grafiksel hata ayıklayıcılarından daha güçlü işlevlere sahip bir hata ayıklama aracı olduğunu göreceksiniz.
sorun
Ortam: Linux/PHP v5.5.7
Cep telefonu bu sitenin arka planına eriştiğinde, bazı sayfalara tıklayın ve 502 hatası belirecek ve 502 hatasının özel nedenini öğrenmek istersiniz.
PHP-FPM hata kaydı aşağıdaki gibidir:
WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start
Çekirdek dosya
Çekirdek dosya aslında bir bellek görüntüsüdür; program çökerken, belleğin ilgili bilgilerini depolar; bu dosya esas olarak programı hata ayıklamak için kullanılır. Program çöktüğünde, bir core dosyası oluşturulur; aslında bunun bir core dump dosyası olduğu söylenebilir; varsayılan üretim konumu çalıştırılabilir programla aynı dizindedir, dosya adı core.***'dür, burada *** belirli bir sayıdır.
Komut:
çekirdek dosya boyutu (bloklar, -c) 0 Veri seg boyutu (kbayt, -d) sınırsız Zamanlama önceliği (-e) 0 dosya boyutu (bloklar, -f) sınırsız Bekleyen Sinyaller (-i) 7271 Maksimum kilitli bellek (kbayt, -l) 64 Maksimum Bellek Boyutu (Kbayt, -M) Sınırsız Dosyaları aç (-n) 65535 Boru boyutu (512 bayt, -p) 8 POSIX mesaj kuyrukları (bayt, -q) 819200 Gerçek zamanlı öncelik (-r) 0 Yığın boyutu (kbayt, -s) 8192 CPU süresi (saniye, -t) sınırsız maksimum kullanıcı süreçleri (-u) 7271 Sanal Bellek (kbayt, -V) sınırsız Dosya Kilitleri (-X) Unlimited Çekirdek dosya boyutu 0 ise, çekirdek dosya oluşturulamaz ve ayarlamamız gerekir.
ulimit -c unlimited, çekirdek dosyanın boyutunun sınırsız olduğu anlamına gelir
Kurulum tamamlandı, unutmayınphp-fpm servisini yeniden başlatın, komut şöyledir:
Hata kaydını tekrar kontrol edin, aşağıdaki gibi:
[23-Mayıs-2020 14:39:14] UYARI: [havuz www] çocuk 2220, 11 sinyalinde (SIGSEGV - çekirdek boşaldı) çıkış yaptı, başlangıçtan 7.255225 saniye sonra [23-Mayıs-2020 14:39:14] BİLGİLİ: [havuz www] çocuk 2231 başladı Günlükte "SIGSEGV – core dumped" ifadesi varsa, bu rore dosyasının başarıyla oluşturulduğu anlamına gelir.
Çekirdek dosya web sitesi dizininde oluşturulacak, bilmiyorsanız, çekirdek dosyayı aşağıdaki komutla da bulabilirsiniz:
Sunucumun çekirdeği tarafından oluşturulan adres şudur: /alidata/www/itsvse_web/core.2220
gdb kur
Komut şöyledir:
gdb debug php-fpm
.gdbinit dosyasını hazırla
.gdbinit dosyası PHP kaynak kodunun altında ve çalıştırdığınız php sürümüyle tutarlı olmalı!
Dosya adresim: /root/sh-1.5.5/php-5.5.7/.gdbinit
.gdbinit dosyasının en son php sürümünün indirme adresi:
Bağlantı girişi görünür.
Çekirdek dosyayı açmak için gdb
Çekirdek dosya dizininde aşağıdaki komutu çalıştırın:
[root@o itsvse_web]# gdb php-fpm -c core.2220 GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7 Telif Hakkı (C) 2013 Free Software Foundation, Inc.'e ait. GPLv3+ Lisansı: GNU GPL sürüm 3 veya daha yeni sürümler <Bağlantı girişi görünür. Bu özgür yazılımdır: onu değiştirme ve yeniden dağıtma özgürlüğünüz. Yasanın izin verdiği ölçüde GARANTI YOKTUR. "Show copying" yazın ve detaylar için "garantiyi göster" seçeneği. Bu GDB "x86_64-redhat-linux-gnu" olarak yapılandırıldı. Hata bildirim talimatları için lütfen bakınız: <Bağlantı girişi görünür. /alidata/server/php-5.5.7/sbin/php-fpm sembollerinden okunuyorum... Bitti. [Yeni LWP 2220] [libthread_db etkinleştirilmiş olarak konu hata ayıklama] "/lib64/libthread_db.so.1" libthread_db host kütüphanesi kullanıyorum. Core, 'php-fpm: pool www' tarafından oluşturuldu. Program, sinyal 11, Segmentasyon hatası ile sonlandırıldı. #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 { Ayrı hata ayıklama bilgileri eksik, şu şekilde kullanın: 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 Aşağıdaki gibi kelimeleri görebilirsiniz:
Core, 'php-fpm: pool www' tarafından oluşturuldu. Program, sinyal 11, Segmentasyon hatası ile sonlandırıldı. bt(backtrace): Çağrı yığınını listeler
(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 (durum=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
Çıkış başlığını inceleyin
PHP kaynak kodunda sağlanan .gdbinit (gdb komut betikleme) tanıtım
zbacktrace ve değişken değerlerine bakın
(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(dizi(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("gösteri mesajı") /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(dizi(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("gösteri mesajı") /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) baskı ((zval *)0xec46a28) $1 = (zval *) 0xec46a28 (GBB) Printzv $1 [0xec46a28] (refcount=5) dizi(1): { "url\0" => [0xecb2fb0] (refcount=2) string(33): "/admin.php?action=index&mobile=no" } (gdb) Çözüm
Aslında hata görmedim ama kayıtlardan mobil erişimde bir sorun olduğu açıkça görülüyordu ve test ettikten sonra gerçekten sadece mobil erişim durumunda 502 hatası olduğunu anladım.
Arka planda mobil sürüm olmadığı için, admin.php kaynak kodunu doğrudan değiştirdim ve ilk satıra şu kodu ekledim:
Bu şekilde, program her zaman PC tarayıcısından erişim talebi alır ve mobil telefon versiyonunun mantıksal kodundan geçmeyecek, bu da çözüldü!
|