Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 7943|Répondre: 0

Utilisez gdb pour déboguer l’erreur d’exception php-fpm

[Copié le lien]
Publié sur 23/05/2020 17:54:01 | | | |
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 !




Précédent:Nginx personnalise la page d’erreur 404 et renvoie une solution de code d’état 200
Prochain:Utilisation de base de [ngClass] et [ngStyle] dans Angular
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com