gdb php-fpm,使用 gdb 调试 php-fpm 异常错误
相关资源下载GDB简介
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。
问题
环境:Linux / PHP v5.5.7
在手机访问本站后台的时候,点击一些页面,会出现502错误,想找到具体是什么原因到导致的502错误。
php-fpm错误日志如下:
WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start
core文件介绍
core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试。当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文件,默认生成位置与可执行程序位于同一目录下,文件名为core.***,其中***是某一数字。
命令:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7271
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 7271
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
core file size 为 0 ,则不能生成core文件,需要我们设置一下。
若ulimit -c unlimited,则表示core文件的大小不受限制
QQ截图20200523164952.jpg (50.49 KB, 下载次数: 4)
2020-5-23 16:50 上传
设置完成,记得重启下php-fpm服务,命令如下:
[23-May-2020 14:39:14] WARNING: [pool www] child 2220 exited on signal 11 (SIGSEGV - core dumped) after 7.255225 seconds from start
[23-May-2020 14:39:14] NOTICE: [pool www] child 2231 started
日志中含有“SIGSEGV – core dumped”字样,就代表生成rore文件成功。
core文件会生成在网站目录下面,如果不知道的话,也可以通过如下命令查找core文件:
安装gdb
命令如下:
gdb 调试 php-fpm
准备 .gdbinit 文件
.gdbinit 文件在PHP源代码下面,一定要和运行的php版本一致!
我的文件地址:/root/sh-1.5.5/php-5.5.7/.gdbinit
最新php版本的.gdbinit文件下载地址:
https://github.com/php/php-src/blob/master/.gdbinit
gdb 打开 core 文件
在core文件目录下,执行如下命令:
[root@o itsvse_web]# gdb php-fpm -c core.2220
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
...
Reading symbols from /alidata/server/php-5.5.7/sbin/php-fpm...done.
[New LWP 2220]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Core was generated by `php-fpm: pool www '.
Program terminated with signal 11, Segmentation fault.
#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 {
Missing separate debuginfos, use: 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
可以看到类似下边的字样:
Core was generated by `php-fpm: pool www '.
Program terminated with signal 11, Segmentation fault.
bt(backtrace):列出调用栈
(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 in 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)
at /root/sh-1.5.5/php-5.5.7/TSRM/tsrm_virtual_cwd.c:1292
#2 0x000000000075308c in 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
QQ截图20200523173930.jpg (178.64 KB, 下载次数: 4)
2020-5-23 17:39 上传
查看退出线程
(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(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] template("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] 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])
QQ截图20200523174920.jpg (20.91 KB, 下载次数: 6)
2020-5-23 17:49 上传
(gdb) print ((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)解决办法
我其实也没看出来啥错误,但是从日志明显看到手机访问出了问题,经过测试,确实只有在手机访问的情况下出现502错误。
因为后台,根本就没有手机版本,我直接修改 admin.php 源码,第一行增加如下代码:
gdb php-fpm,使用 gdb 调试 php-fpm 异常错误相关推荐
- linux下 如何调试php,linux下使用gdb对php源码调试
title: linux下使用gdb对php源码调试 date: 2018-02-11 17:59:08 tags: --- linux下使用gdb进行php调试 调试了一些php的漏洞,记录一下大概 ...
- GDB调试之定位段错误
其余相关内容可参考个人博客 程序添加打印日志 走查代码,逐步添加printf打印,逐步定位,该方法最简单,且在开发调试过程中也较为快捷有效 GDB调试程序 编译时加入-g参数,使用gdb调试运行程序, ...
- gdb 的用法(Linux调试器)
在Linux应用程序开发中,最常用的调试器是gdb,它可以在程序中设置断点.查看变量值.一步一步跟踪程序的执行过程. GDB(GNU symbolic debugger)简单地说就是一个调试工具.它是 ...
- [gdb][python][libpython] 使用gdb调试python脚本
https://devguide.python.org/gdb/ https://sourceware.org/gdb/current/onlinedocs/gdb/Python.html#Pytho ...
- gdb好文章:GDB十分钟教程
(GUI调试器:insight和ddd) list(l) :其作用就是列出程序的源代码,默认每次显示10行. list 行号:将显示当前文件以"行号"为中心的前后10行代码,如:l ...
- Centos7利用fpm制作rpm包(fpm安装及使用)
安装fpm 安装ruby yum -y install ruby rubygems ruby-devel 查看当前ruby源 gem source -l 添加国内源,删除国外源 gem sources ...
- linux gdb 脚本,如何写gdb命令脚本
作为UNIX/Linux下使用广泛的调试器,gdb不仅提供了丰富的命令,还引入了对脚本的支持:一种是对已存在的脚本语言支持,比如python,用户可以直接书写python脚本,由gdb调用python ...
- gdb+linux+查看变量,gdb查看变量值
转贴地址 gdb调试过程中如何查看变量的值?一般说来使用print(p)指令来实现,并有自己很多的输出格式. print和它的显示格式 p /x var #十六进制显示变量. p /d var #十进 ...
- linux gdb添加符号表,gdb – 什么是符号表,它如何集成到可执行文件中?
gdb使用两组符号. -g集合是调试符号,它使事情变得更容易,因为它们允许您在调试时查看代码并查看变量. 编译时默认包含另一组符号.这些是链接符号,并且存在于ELF(可执行链接格式)符号表中.这包含比 ...
最新文章
- 利用Attribute和IErrorHandler处理WCF全局异常
- 联想笔记本电脑的F1至F12键盘问题。怎么设置才能不按FN就使用F1
- C++输出流的格式控制
- Ubuntu常用命令与技巧
- ImportBeanDefinitionRegistrar向容器中注册bean
- delphi的几个特别关键字 object absolute
- MSP432P401R TI Drivers 库函数学习笔记(二)认识TI-RTOS (TI-POSIX)
- [2018湖南省队集训] 6.28 T3 simulate
- 数据中心网络架构的问题与演进 — 传统路由交换技术与三层网络架构
- PowerMock介绍
- 创建IPSEC连接安全
- C语言餐馆点菜系统设计,order-system 使用c语言设计的餐厅点菜系统 - 下载 - 搜珍网...
- 矩形嵌套-记忆化搜索(dp动态规划)
- RTT distribution of Internet
- 短视频发布之前要注意什么?从配音到发布时间,选对才能吸粉引流
- win7 OneNote不能登录一直登录
- 又一个IGame的bug
- iPython清屏命令
- JDK 8 的安装报javac不是外部或内部命令
- scanf() 的返回值