相关资源下载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 异常错误相关推荐

  1. linux下 如何调试php,linux下使用gdb对php源码调试

    title: linux下使用gdb对php源码调试 date: 2018-02-11 17:59:08 tags: --- linux下使用gdb进行php调试 调试了一些php的漏洞,记录一下大概 ...

  2. GDB调试之定位段错误

    其余相关内容可参考个人博客 程序添加打印日志 走查代码,逐步添加printf打印,逐步定位,该方法最简单,且在开发调试过程中也较为快捷有效 GDB调试程序 编译时加入-g参数,使用gdb调试运行程序, ...

  3. gdb 的用法(Linux调试器)

    在Linux应用程序开发中,最常用的调试器是gdb,它可以在程序中设置断点.查看变量值.一步一步跟踪程序的执行过程. GDB(GNU symbolic debugger)简单地说就是一个调试工具.它是 ...

  4. [gdb][python][libpython] 使用gdb调试python脚本

    https://devguide.python.org/gdb/ https://sourceware.org/gdb/current/onlinedocs/gdb/Python.html#Pytho ...

  5. gdb好文章:GDB十分钟教程

    (GUI调试器:insight和ddd) list(l) :其作用就是列出程序的源代码,默认每次显示10行. list 行号:将显示当前文件以"行号"为中心的前后10行代码,如:l ...

  6. Centos7利用fpm制作rpm包(fpm安装及使用)

    安装fpm 安装ruby yum -y install ruby rubygems ruby-devel 查看当前ruby源 gem source -l 添加国内源,删除国外源 gem sources ...

  7. linux gdb 脚本,如何写gdb命令脚本

    作为UNIX/Linux下使用广泛的调试器,gdb不仅提供了丰富的命令,还引入了对脚本的支持:一种是对已存在的脚本语言支持,比如python,用户可以直接书写python脚本,由gdb调用python ...

  8. gdb+linux+查看变量,gdb查看变量值

    转贴地址 gdb调试过程中如何查看变量的值?一般说来使用print(p)指令来实现,并有自己很多的输出格式. print和它的显示格式 p /x var #十六进制显示变量. p /d var #十进 ...

  9. linux gdb添加符号表,gdb – 什么是符号表,它如何集成到可执行文件中?

    gdb使用两组符号. -g集合是调试符号,它使事情变得更容易,因为它们允许您在调试时查看代码并查看变量. 编译时默认包含另一组符号.这些是链接符号,并且存在于ELF(可执行链接格式)符号表中.这包含比 ...

最新文章

  1. 利用Attribute和IErrorHandler处理WCF全局异常
  2. 联想笔记本电脑的F1至F12键盘问题。怎么设置才能不按FN就使用F1
  3. C++输出流的格式控制
  4. Ubuntu常用命令与技巧
  5. ImportBeanDefinitionRegistrar向容器中注册bean
  6. delphi的几个特别关键字 object absolute
  7. MSP432P401R TI Drivers 库函数学习笔记(二)认识TI-RTOS (TI-POSIX)
  8. [2018湖南省队集训] 6.28 T3 simulate
  9. 数据中心网络架构的问题与演进 — 传统路由交换技术与三层网络架构
  10. PowerMock介绍
  11. 创建IPSEC连接安全
  12. C语言餐馆点菜系统设计,order-system 使用c语言设计的餐厅点菜系统 - 下载 - 搜珍网...
  13. 矩形嵌套-记忆化搜索(dp动态规划)
  14. RTT distribution of Internet
  15. 短视频发布之前要注意什么?从配音到发布时间,选对才能吸粉引流
  16. win7 OneNote不能登录一直登录
  17. 又一个IGame的bug
  18. iPython清屏命令
  19. JDK 8 的安装报javac不是外部或内部命令
  20. scanf() 的返回值

热门文章

  1. Python 初学者常犯的5个错误,布尔型竟是整型的子类
  2. 时间为什么用 12 进制?
  3. Linux系统中创建虚拟环境详解
  4. Redis 安装详细过程(redis基本使用(服务端和客户端)、修改密码)
  5. Linux之终端命令格式的组成
  6. 解决Linux CENTOS服务器 tree命令出现乱码 解析原因
  7. 数据结构-图-遍历-搜索
  8. HTML页面展示遇到问题
  9. 【项目实践】车距+车辆+车道线+行人检测项目实践
  10. 综述 | 图像去噪方法比较