Introduction de GDB :
GDB est un puissant outil de débogage de programmes UNIX publié par la GNU Open Source Organization. Si vous travaillez sur la plateforme UNIX, vous constaterez que GDB est un outil de débogage qui possède des fonctions plus puissantes que les débogueurs graphiques de VC et BCB.
émettre
Environnement : Linux/PHP v5.5.7
Lorsque le téléphone mobile accède à l’arrière-plan de ce site, cliquez sur certaines pages, et l’erreur 502 apparaîtra, et vous voudrez savoir quelle est la raison précise de l’erreur 502.
Le journal d’erreur PHP-FPM est le suivant :
WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start
Fichier principal
Le fichier core est en réalité une image de mémoire, qui stocke les informations correspondantes de la mémoire lorsque le programme plante, et sert principalement à déboguer le programme. Lorsque le programme plante, un fichier core est généré, en fait, il faut dire qu’il s’agit d’un fichier de dump core, l’emplacement de génération par défaut est dans le même dossier que le programme exécutable, le nom du fichier est core.***, où *** est un certain nombre.
Commander:
Taille du fichier de cœur (blocs, -c) 0 Data SEG Taille (Kbytes, -D) illimitée Priorité de planification (-e) 0 Taille du fichier (blocs, -f) illimitée Signaux en attente (-i) 7271 Mémoire verrouillée maximale (Kbytes, -L) 64 Taille maximale de la mémoire (Kbytes, -M) illimitée Fichiers ouverts (-N) 65535 Taille du pipeline (512 octets, -p) 8 File d’attente de messages POSIX (octets, -q) 819200 Priorité en temps réel (-r) 0 Taille de la pile (kbytes, -s) 8192 Temps CPU (secondes, -t) illimité Processus utilisateurs max (-U) 7271 Mémoire virtuelle (Kbytes, -V) Illimitée Verrous de fichier (-x) illimités Si la taille du fichier core est 0, le fichier core ne peut pas être généré, et nous devons le définir.
ulimit -c illimité, cela signifie que la taille du fichier core est illimitée
Installation terminée, souvenez-vousRedémarrer le service php-fpm, la commande est la suivante :
Vérifiez à nouveau le journal des erreurs, comme suit :
[23-mai-2020 14:39:14] AVERTISSEMENT : [pool www] l’enfant 2220 est sorti au signal 11 (SIGSEGV - cœur vidé) après 7,255225 secondes après le début [23-mai-2020 14:39:14] AVIS : [piscine www] enfant 2231 commencé Si le journal contient les mots « SIGSEGV – core dumped », cela signifie que le fichier rore a été généré avec succès.
Le fichier de base sera généré dans le répertoire du site web, si vous ne le savez pas, vous pouvez aussi trouver le fichier de base avec la commande suivante :
L’adresse générée par le cœur de mon serveur est : /alidata/www/itsvse_web/core.2220
Installer GDB
La commande est la suivante :
GDB Debug php-FPM
Préparez le fichier .gdbinit
Le fichier .gdbinit est sous code source PHP, et il doit être cohérent avec la version php que vous utilisez !
Mon adresse de fichier : /root/sh-1.5.5/php-5.5.7/.gdbinit
Adresse de téléchargement de la dernière version php du fichier .gdbinit :
La connexion hyperlientérée est visible.
GDB pour ouvrir le fichier de base
Dans le répertoire de fichiers de base, exécutez la commande suivante :
[root@o itsvse_web]# GDB php-fpm -c core.2220 GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7 Droits d’auteur (C) 2013 Free Software Foundation, Inc. Licence GPLv3+ : GNU GPL version 3 ou ultérieure <La connexion hyperlientérée est visible. C’est un logiciel libre : vous êtes libre de le modifier et de le redistribuer. Il n’y a AUCUNE GARANTIE, dans la mesure permise par la loi. Tapez « afficher copie » et « montrer la garantie » pour les détails. Ce GDB était configuré en « x86_64-redhat-linux-gnu ». Pour les instructions de signalement des bugs, veuillez consulter : <La connexion hyperlientérée est visible. Lecture des symboles de /alidata/server/php-5.5.7/sbin/php-fpm... Fait. [Nouveau LWP 2220] [Débogage de fil avec libthread_db activé] Utilisation de la bibliothèque hôte libthread_db « /lib64/libthread_db.so.1 ». Core a été généré par 'php-fpm : pool www'. Programme terminé avec signal 11, défaut de segmentation. #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 { En cas de debuginfos séparées manquantes, utilisez : 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 Vous pouvez voir quelque chose comme les mots suivants :
Core a été généré par 'php-fpm : pool www'. Programme terminé avec signal 11, défaut de segmentation. bt(backtrace) : Liste la pile d’appels
(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 dans virtual_file_ex (état=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 dans 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 ») à /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c :1954
Consultez le fil de discussion de sortie
Introduction de .gdbinit (scripting de commandes gdb) fourni dans le code source PHP
Regardez les valeurs zbacktrace et variables
(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 », « », tableau(1)[0xec46a28], tableau(0)[0xec46bc0], 0) /alidata/www/itsvse_web/source/function/function_core.php :1426 [0xed9a6d8] showmessage(« mobile_template_no_found », « », tableau(1)[0xec46a28]) /alidata/www/itsvse_web/source/function/function_core.php :618 [0xed97638] modèle (« dsu_amupper :pper_foot ») /alidata/www/itsvse_web/source/plugin/dsu_amupper/pper.class.php :82 [0x7ffdd9ec3e50] plugin_dsu_amupper->global_footer(tableau(0)[0xec40028]) [0xed97080] call_user_func(tableau(2)[0xed6b8b0], tableau(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(réseau(0)[0xec39ab0]) [0xed8d780] call_user_func(tableau(2)[0xeb833e8], tableau(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(tableau(0)[0xeb834f8])
(GDB) Impression ((Zval *)0xec46a28) $1 = (zval *) 0xec46a28 (GDB) Imprimez 1 $ [0xec46a28] (refcount=5) array(1) : { « url\0 » => [0xecb2fb0] (refcount=2) chaîn(33) : « /admin.php ?action=index&mobile=no » } (GDB) Solution
Je n’ai en fait pas vu d’erreur, mais il était évident d’après les journaux qu’il y avait un problème d’accès mobile, et après test, il s’agissait effectivement d’une erreur 502 uniquement pour l’accès mobile.
Comme il n’y a pas de version mobile en arrière-plan, j’ai directement modifié le code source admin.php et ajouté le code suivant sur la première ligne :
Ainsi, le programme recevra toujours une demande d’accès du navigateur PC, et elle ne passera pas par le code logique de la version mobile, résolu !
|