php core,使用 gdb 调试 PHP core
一、开启
查看是否开启 core dump 输出
ulimit -a
打开 core dump 文件记录
ulimit -c unlimited
yum install gdb php-dbg
关闭 core dump 文件记录
ulimit -c 0
设置内核core dump出来的存放路径(注意目录要有权限给php写):
echo "/tmp/core.%e.%p.%t" > /proc/sys/kernel/core_pattern
二、调试
1、准备 .gdbinit 文件
2、用 gdb 打开 core 文件
gdb php-fpm -c core-php-fpm.920
可以看到类似下边的字样:
Core was generated by `php-fpm: pool www '.
Program terminated with signal 11, Segmentation fault.
3、查看 core 发生时刻的堆栈
(gdb) bt
#0 zend_mm_alloc_small (size=) at /usr/src/debug/php-7.0.6/Zend/zend_alloc.c:1295
#1 zend_mm_alloc_heap (size=) at /usr/src/debug/php-7.0.6/Zend/zend_alloc.c:1366
#2 _emalloc (size=) at /usr/src/debug/php-7.0.6/Zend/zend_alloc.c:2450
#3 0x00007f7a6fad0511 in apm_sprintf (fmt=0x7f7a6faeff50 "\n %04d-%02d-%02d %02d:%02d:%02d Version %s\n Process %d received signal %2d: %s , bss[%p]\n")
at /PHP/64/source/php7.0.0_nzts/ext/apm/apm_common.c:371
#4 0x00007f7a6facbefd in print_backtrace (sig=11) at /PHP/64/source/php7.0.0_nzts/ext/apm/apm.c:1937
#5 0x00007f7a6facbfd7 in agent_fatal_signal_handler (sig=11) at /PHP/64/source/php7.0.0_nzts/ext/apm/apm.c:1955
#6
#7 zend_mm_alloc_small (size=) at /usr/src/debug/php-7.0.6/Zend/zend_alloc.c:1295
#8 zend_mm_alloc_heap (size=) at /usr/src/debug/php-7.0.6/Zend/zend_alloc.c:1366
4、引入 PHP 源代码中提供的 .gdbinit (gdb 命令编写脚本)
(gdb) source /root/.gdbinit
5、查看 backtrace 和变量值
(gdb) zbacktrace
[0x7f7a75e138c0] C("DEBUG") /usr/share/nginx/html/smartphp/common.php:28
[0x7f7a75e137d0] Model->_connectDb() /usr/share/nginx/html/smartphp/core/Model.class.php:44
[0x7f7a75e13680] Model->bindData("SELECT\40tips\40FROM\40keyword_phone\40WHERE\40word=:word", array(1)[0x7f7a75e136f0], "getdata") /usr/share/nginx/html/smartphp/core/Model.class.php:143
[0x7f7a75e13580] Model->getData("SELECT\40tips\40FROM\40keyword_phone\40WHERE\40word=:word", array(1)[0x7f7a75e135f0]) /usr/share/nginx/html/smartphp/core/Model.class.php:215
[0x7f7a75e134c0] Model->getField("SELECT\40tips\40FROM\40keyword_phone\40WHERE\40word=:word", array(1)[0x7f7a75e13530]) /usr/share/nginx/html/appdata/smartphp/core/Model.class.php:264
(gdb) print ((zval *)0x7f7a75e13530)
$1 = (zval *) 0x7f7a75e13530
(gdb) printzv $1
[0x7f7a75e13530] (refcount=3) array: Packed(1)[0x7f7a75e94888]: {
[0] 0 => [0x7f7a75e6ad88] (refcount=4) string: PP红包。
}
php core,使用 gdb 调试 PHP core相关推荐
- linux core文件GDB调试方法
一.如何使用core文件 1. 使用core文件 在core文件所在目录下键入: gdb -c coreXXX 它会启动GNU的调试器,来调试core文件,并且会显示生成此core文件的程序名,中止此 ...
- linux c++ 程序运行core,gdb调试显示cannot access memory at address
如题,在linux环境写的c++程序,运行时core了,gdb调试core文件显示:cannot access memory at address 参考了:GDB调试,遭遇"cannot a ...
- C++ CORE DUMP gdb 调试
先查看内存转储的大小限制: ulimit -c 返回的结果是以512 bytes为单位的. 如果没有返回结果,说明设置为0,需要进行手动设置:ulimit -c unlimited 测试代码: #in ...
- Linux环境崩溃生成core文件以及调试
Windows环境崩溃问题可根据vs调试工具查看,Linux同样可以查看调用堆栈的信息,只是 需要更改Linux设置,使程序崩溃时候产生core文件.然后gdb调试即可. 1产生core文件方法 产生 ...
- 用gdb调试core dump文件
gdb基本的使用方法在此就不说了. 载入core文件的命令行为: dgb exe core 例如 gdb ./testall ./core.2345 最重要的一个命令是where,这个就像windbg ...
- gdb 调试命令的使用及总结
GDB: The GNU Project Debugger:http://www.gnu.org/software/gdb/documentation/ 参考:http://www.jianshu.c ...
- gdb 调试_一文入门Linux下gdb调试(二)
点击"蓝字"关注我吧 作者:良知犹存 转载授权以及围观:欢迎添加微信号:Conscience_Remains 总述 今天我们介绍一下core dump文件,Core dum ...
- 【C++之GDB调试】GDB调试从入门到精通
GDB作为经典的调试系统,这里记录它的原理和实践. GDB概述 GDB是什么 GDB是GNU开源组织发布的一个强大的UNIX/Linux下的程序调试工具,支持多种语言. 编译程序 "-g&q ...
- linux gdb网络调试,一文入门Linux下gdb调试(二)
本文转载自[微信公众号:羽林君,ID:Conscience_Remains] 总述 今天我们介绍一下core dump文件,Core dump叫做核心转储,它是进程运行时在突然崩溃的那一刻的一个内存快 ...
最新文章
- Linux(9)用户、组和权限管理
- 【一】Drupal 入门之新建主题
- php与mysql手册下载地址_PHP与Mysql的连接
- 菜鸟教程c语言题目,C 练习实例40
- 面试宝典系列-Mysql索引的区别
- matlab画图(plot)命令。长期更新!
- 让openkore 更节省你的CPU和内存
- 同一网络俩台计算机连接,两台电脑连接同一个wifi算是局域网么
- 14期 《心有猛虎 细嗅蔷薇》5月刊
- Java设计模式大全
- CF-Predictor安装教程
- HTTP/HTTPS
- 健康人寿保险服务平台
- 说一下HashMap的实现原理
- 织梦插件-织梦插件大全-免费织梦插件大全
- docker for windows使用
- 淘宝自然搜索机制排名原理介绍,如何做好店铺商品自然搜索排名?
- Python基础-list和tuple使用
- 【兴趣书签】类似《看不见的客人》的惊悚电影推荐
- 模块化多电平变换器MMC(交流380V-直流800V整流)仿真,动稳态性能良好