Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 7943|Jawab: 0

Gunakan gdb untuk men-debug kesalahan pengecualian php-fpm

[Salin tautan]
Diposting pada 23/05/2020 17.54.01 | | | |
Pengenalan GDB:

GDB adalah alat debugging program UNIX yang kuat yang dirilis oleh GNU Open Source Organization. Jika Anda mengerjakan platform UNIX, Anda akan menemukan bahwa GDB adalah alat debugging yang memiliki fungsi yang lebih kuat daripada debugger grafis VC dan BCB.

masalah

Lingkungan: Linux/PHP v5.5.7

Saat ponsel mengakses latar belakang situs ini, klik beberapa halaman, dan kesalahan 502 akan muncul, dan Anda ingin mengetahui apa alasan spesifik dari kesalahan 502.

Log kesalahan php-fpm adalah sebagai berikut:

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

File inti

File inti sebenarnya adalah gambar memori, yang menyimpan informasi memori yang sesuai saat program mogok, dan terutama digunakan untuk men-debug program. Ketika program mogok, file inti akan dihasilkan, pada kenyataannya, itu harus dikatakan sebagai file dump inti, lokasi pembuatan default berada di direktori yang sama dengan program yang dapat dieksekusi, nama filenya adalah core.***, di mana *** adalah angka tertentu.

Perintah:

Ukuran file inti (blok, -c) 0
Ukuran seg data (kbyte, -d) tidak terbatas
Prioritas Penjadwalan (-E) 0
Ukuran file (blok, -f) tidak terbatas
sinyal tertunda (-i) 7271
Memori Terkunci Maks (Kbyte, -L) 64
Ukuran memori maks (Kbytes, -M) tidak terbatas
Buka File (-N) 65535
ukuran pipa (512 byte, -p) 8
Antrean pesan POSIX (byte, -q) 819200
Prioritas waktu nyata (-r) 0
Ukuran tumpukan (Kbyte, -s) 8192
Waktu CPU (detik, -t) Tidak terbatas
Proses Pengguna Maks (-U) 7271
Memori Virtual (Kbyte, -V) Tidak terbatas
Kunci File (-X) Tidak Terbatas

Jika ukuran file inti adalah 0, file inti tidak dapat dihasilkan, dan kita perlu mengaturnya.

ulimit -c tidak terbatas, artinya ukuran file inti tidak terbatas


Pengaturan selesai, ingatMulai ulang layanan php-fpm, perintahnya adalah sebagai berikut:



Periksa log kesalahan lagi, sebagai berikut:

[23-Mei-2020 14:39:14] PERINGATAN: [pool www] anak 2220 keluar pada sinyal 11 (SIGSEGV - inti dibuang) setelah 7.255225 detik dari awal
[23-Mei-2020 14:39:14] MELIHAT: [kolam renang www] anak 2231 dimulai

Jika log berisi kata-kata "SIGSEGV – core dumped", itu berarti file rore telah berhasil dihasilkan.

File inti akan dibuat di bawah direktori situs web, jika Anda tidak tahu, Anda juga dapat menemukan file inti dengan perintah berikut:


Alamat yang dihasilkan oleh inti server saya adalah: /alidata/www/itsvse_web/core.2220

Instal gdb

Perintahnya adalah sebagai berikut:



gdb debug php-fpm

Siapkan file .gdbinit

File .gdbinit berada di bawah kode sumber PHP, dan harus konsisten dengan versi php yang Anda jalankan!

Alamat file saya: /root/sh-1.5.5/php-5.5.7/.gdbinit

Unduh alamat file .gdbinit versi php terbaru:

Login hyperlink terlihat.

gdb untuk membuka file inti

Di direktori file inti, jalankan perintah berikut:

[root@o itsvse_web]# gdb php-fpm -c core.2220
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7
Hak Cipta (C) 2013 Free Software Foundation, Inc.
Lisensi GPLv3+: GNU GPL versi 3 atau lebih baru <Login hyperlink terlihat.
Ini adalah perangkat lunak bebas: Anda bebas mengubah dan mendistribusikannya kembali.
TIDAK ADA GARANSI, sejauh diizinkan oleh hukum.  Ketik "tampilkan penyalinan"
dan "tunjukkan garansi" untuk detailnya.
GDB ini dikonfigurasi sebagai "x86_64-redhat-linux-gnu".
Untuk petunjuk pelaporan bug, silakan lihat:
<Login hyperlink terlihat.
Membaca simbol dari /alidata/server/php-5.5.7/sbin/php-fpm... selesai.
[LWP Baru 2220]
[Penelusuran kesalahan utas menggunakan libthread_db diaktifkan]
Menggunakan perpustakaan libthread_db host "/lib64/libthread_db.so.1".
Inti dihasilkan oleh 'php-fpm: pool www '.
Program diakhiri dengan sinyal 11, Kesalahan segmentasi.
#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)
    di /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751
751        {
Tidak ada debuginfo terpisah, gunakan: 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

Anda dapat melihat sesuatu seperti kata-kata berikut:

Inti dihasilkan oleh 'php-fpm: pool www '.
Program diakhiri dengan sinyal 11, Kesalahan segmentasi.

bt(backtrace): Mencantumkan tumpukan panggilan

(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)
    di /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:751
#1 0x000000000075209a dalam 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)
    di /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:1292
#2 0x000000000075308c di 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") di /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c :1954



Tinjau utas keluar


Memperkenalkan .gdbinit (skrip perintah gdb) yang disediakan dalam kode sumber PHP



Lihat nilai zbacktrace dan variabel

(gdb) zbacktrace
[0xed9f8f0] lang() /alidata/www/itsvse_web/source/function/function_core.php:444
[0xed9e2e8] lang("inti", "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] templat("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] templat("dsu_amupper:pper_foot") /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php:82
[0x7ffdd9ec49a0] plugin_dsu_amupper->global_footer(array(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] templat("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) cetak ((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)
Larutan

Saya sebenarnya tidak melihat kesalahan apa pun, tetapi jelas dari log bahwa ada masalah dengan akses seluler, dan setelah pengujian, itu memang kesalahan 502 hanya dalam kasus akses seluler.

Karena tidak ada versi seluler di latar belakang, saya langsung memodifikasi kode sumber admin.php dan menambahkan kode berikut di baris pertama:

Dengan cara ini, program akan selalu mendapatkan permintaan akses dari browser PC, dan tidak akan melalui kode logis versi ponsel, terpecahkan!




Mantan:Nginx menyesuaikan halaman kesalahan 404 dan mengembalikan solusi kode status 200
Depan:Penggunaan dasar [ngClass] dan [ngStyle] di Angular
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com