解决PHP扩展XDEBUG 在windows情况下只能使用内网设置断点而外网无法捕获断点的情况 - PHP程序员学习笔记|如何学习PHP

PHP程序员学习笔记|如何学习PHP

个人总结的PHP学习方法


解决PHP扩展XDEBUG 在windows情况下只能使用内网设置断点而外网无法捕获断点的情况

2017-12-16 0phpcom 学习笔记


解决PHP扩展XDEBUG 在windows情况下只能使用内网设置断点而外网无法捕获断点的情况

    由于之前开发都是用的MAC 在MAC下设置断点都非常正常,而且之前调第三方支付只需要把内网映射到外网下就可以捕获断点了,但是不知道为什么在windows下这一切就变得复杂了,只能设置自己本机的断点,前段时间由于设置了断点还一度无法使用断点调试,这使我一度陷入无奈中,后来痛定思痛在思考为什么我本机在内网中其他机子同处于一个网段都可以ping通那么问题来了到底什么原因使我的机子无法建立断点
    后来一直在查阅相关资料可是这方面的资料比较少 大部分都是MAC/Linux的,后来想到应该从源码层开始理解,由于是个人总结性文章就不多说太多具体步骤了,从网上下载了php5.4的代码编译出DEBUG和RELEAS版本 这里说下如果5.4需要下载对应的VS2008版本 不然版本错了是编译不了的,然后创建一个名称为XDEBUG的扩展用VS打开再将XDEBUG的扩展拷到项目中就可以编译成功了,另外要使用zend函数需要将预处理器中的ZEND_DEBUG=1 改为 ZEND_DEBUG=0
具体请看:http://www.0-php.com/?post=340
    后来找到XDEBUG发送报文的函数
static void send_message(xdebug_con *context, xdebug_xml_node *message TSRMLS_DC)
{
	xdebug_str *tmp;

	tmp = make_message(context, message TSRMLS_CC);
	SSENDL(context->socket, tmp->d, tmp->l);
	xdebug_str_ptr_dtor(tmp);
	
}
发现即使是在其他网络访问的时候XDEBUG都会发送PDBG的报文但是当客户端与服务端需要建立SOCKET连接的时候尽然返回NULL这使我百思不得其解,中间工作的原因又停了几天
后来当我重新启动调试环境编译我的XDEBUG的时候竟然可以了SOCKET也建立了起来但是我不知道自己曾经改了什么
修复后的PHP_XDEBUG 目前我只测了php5.4的没有问起不知道其他版本能否使用
修复后的XDEBUG: php_xdebug.zip(修复本机以外不能获取断点的问题)
« php的自动化测试 phpt | 网站改版»
发表评论:









订阅Rss