xdebug调试时出错,查找原因

昨天在远程调试时,刚开始调试的好好的,突然发现返回的结果变成502了,不对呀!刚刚明明是200的呀!然后我重启了nginx和php-fpm,还是一样的502,难道是代码又有bug了。看了下php-fpm的日志,发现没有任何的出错记录,调试时就是直接断掉,返回个502,什么原因呢?

这时请教了龙哥,在服务器端跟踪php-fpm进程执行时的系统调用和所接收的信号。

首先把php-fpm的进程数量设置为1个,这样就找到是哪个进程处理了cgi请求。

设置好后重启php-fpm服务。

重启后找出那个php-fpm进程的进程号。

然后用gdb调试这个进程。

这时先不设置断点,让程序在IDE中直接一步一步地运行下去,看是在哪个地方出错了。

在代码出错的那一行设置个断点,下次可以直接运行到断点处。

运行完后,就可以看得到出错的地方,先记下这个出错的函数,下次运行时设置断点需要用到(注意:xdebug的断点和gdb的断点是不同的)。

这时,再看一下php-fpm的进程池,发现原来的那个进程的进程号变了,是因为原本的进程挂掉了,主进程又新开了一个子进程。

在Fillder中replay上次的那个请求,等运行到IDE的断点处,再打开gdb,在gdb中设置断点,输入c继续运行。

在IDE中继续运行,这时程序出错了,在gdb中输入bt查看堆栈

在堆栈里可以看到,在用xdebug调试时,是先运行xdebug扩展模块的代码,再运行了原本的php代码。

我在调试时,设置了一个查看的变量,这个变量在运行到这个方法时是一个对象,而我是以数组的方式来读取的,所以语法是有错误的,所以整个http请求返回了错误。由于这是xdebug的错误,所以不使用xdebug调试来运行代码时,返回的数据是正常的。

在找到问题的原因后,我在别的方法内设置了断点,调试时直接跳过这个方法,虽然还是查看同一个变量,但是没有出错。

时间: 2024-08-06 12:35:11

xdebug调试时出错,查找原因的相关文章

计算机进行小数运算时出错的原因和避免方法

计算机进行小数运算时出错的原因: 是因为有一些十进制的小数无法转换成二进制数. 如何地避免小数运算错误: 1.回避策略,即无视这些错误.根据程序目的不同,有时一些微笑的偏差并不会造成什么问题 2.就是把小数转换成整数来计算.计算机计算小数时可能会出错,但进行整数计算时一定不会出现问题.因此我们可以将小数暂时转换成整数在输出的时候再以小数的形式来输出 原文地址:https://www.cnblogs.com/hyy123-/p/10664879.html

三:计算机进行小数运算时出错的原因

0.开篇: (1)二进制数0.1,用十进制数表示的话是多少? 0.5 (2)用小数点后有3位的二进制数,能表示十进制数0.625吗? 可以,0.101 (3)将小数分为符号.尾数.基数.指数4部分进行表现的形式称为什么? 浮点数(浮点数形式) (4)二进制数的基数是什么? 2 (5)通过把0作为数值范围的中间值,从而在不使用符号位的情况下来表示负数的表示方法称为什么? EXCESS系统表示(EXCESS是“剩余的”的意思.例如,把01111111看作是0的话,比这个数小1的01111110就是-

WampServer2.5的XDebug调试不成功的原因

WampServer2.5的php.ini文件位置很奇妙,除了在“wamp\bin\php\php5.5.12”目录下有一个外,“wamp\bin\apache\apache2.4.9\bin”目录下也有一个,而实际使用的是Apache目录下的那个文件,所以修改了无数次php目录下的文件,却始终未能正常在Zend Studio里进行调试.

第三章计算机进行小数运算时出错的原因

以前的我以为计算机是什么都可以做的不会出现什么错误,但我看完这一章以后我才知道,计算机在程序运行后无法得出自己想要的结果,就是十进制转换二进制时,出现了小数的情况 下边我可以通过这个例子就能看出来: #include <studio.h> void main() { float sum; int i; sum = 0; for(i = 1; i <= 100;i++){ sum+=0.1: } print f ("%f\n", sum); } 在这个程序中我们可以看到

无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来 自 HRESULT:

无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”.此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错. (异常来 自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY)) 经过多般折腾,还是没什么更好的办法.

VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决

S2010 F5调试时出现 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常 两个解决方法:1) 打开项目属性,选择调试选项卡,将“启用非托管代码调试”一项钩上.2) 打开项目属性,选择调试选项卡,将“启用Visual Studio宿主进程“一项钩掉. 原文地址:https://www.cnblogs.com/gisoracle/p/9690123.html

dedecms新建内容模型“把数据保存到数据库附加表时出错‘xxx’出错”错误的原因分析和解决方案(转)

把数据保存到数据库附加表 `bc_addonarticle17` 时出错,请把相关信息提交给DedeCms官方.INSERT INTO `bc_addonarticle17`(aid,typeid,redirecturl,templet,userip,body, ) Values( 11 , 11 , , , 127 0 0 1, )You have an error in your 今天在使用dedecms之梦系统进行建站的时候,使用新创建的自定义内容模型来添加文章的时候出现了错误,错误描述如

安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”(错误原因、详细分析及解决方法)以及在Windows Server2012上安装.NET Framework 3.5的详细分析及安装过程

       问题:在服务器(操作系统为Windows server 2012)上安装SQL Server 2012的过程中,安装停留在下图所示的界面上,显示”正在启用操作系统功能NetFx3”随后出现提示框,告知启用windows功能NetFx3时出错. 分析:NetFx3指的是.NET Framework 3.5,SQL Server 2012数据库系统的运行需要依靠.NET Framework 3.5,但是Windows Server2012默认情况下是并没有安装.NET Framewor

myeclipse+PDT+apache+xdebug调试php

一直用myeclipse做java开发,近期转到了php,习惯了myeclipse知道它的可扩展牛逼,想想加个php开发环境应该不难, google了一些零散的文章弄了1天,终于通了,现把完整的过程整理一份,方便查阅. 一.安装myeclipse.php.apache,这个不说了... 二.安装pdt,参考官网指南 Help->Install from Site 可以在线安装也可以离线安装,视个人网络状况. 三.安装xdebug 去http://xdebug.org/wizard.php将你的p