使用qtcreator搭建PHP扩展开发调试环境使用扩展中的函数等),c代码开始唤起单步调试,步骤简单c开发工具:可以识别各种文件格式(m4,makefile),可以处理include现代IDE提供的参考函数,搜索,跳转,终端,git等。背景: gdb调试繁琐。试过clion,eclipse,atom,vscode,qtcreator 从源码编译phpapt-getinstallbuild-essential#找一个自己喜欢的目录(需要O权限)gitclonehttps://github.com/php/php-src.gitcdphp-src./configure--help./buildconf--force./configure--disable-all--prefix=/usr--with-config-file-path=/etc/php.ini--with-config-file-scan-dir=/etc/php.d--enable-ctype--enable-json=sharedmake-j$(cat/proc/cpuinfo|grep"处理器"|wc-l)./sapi/cli/php-vmakeinstallphp-vphp-mphp--iniphp-dextension=json.so-mmkdir/etc/php.decho"extension=json.so">/etc/php.d/json.iniphp-m开发php扩展,请参考扩展开发文章 (sum)cdext./ext_skel--extname=sumcdsum修改以下文件config。m4dnl$Id$dnlconfig.m4forextensionsumdnl此文件中的注释以字符串'dnl'.dnl开头删除其中n必要的。如果您的扩展程序引用外部内容,则此文件将无法运行dnl,请使用with:PHP_ARG_WITH(sum,forsumsupport,[--with-sumIncludesumsupport])iftest"$PHP_SUM"!="no";然后PHP_NEW_EXTENSION(sum,sum.c,$ext_shared,,-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)fisum.cPHP_FUNCTION(sum){zval*input;zval*项目;int32_t总计=0;HashPosition位置;如果(zend_parse_parameters(ZEND_NUM_ARGS(),"a",&input)==FAILURE){return;}for(zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(input),&position);(item=zend_hash_get_current_data_ex(Z_ARRVAL_P(input),&position));zend_hash_move_forward_ex(Z_ARRVAL_P(input),&position)){if(Z_TYPE_P(item)==IS_LONG){总计+=Z_LVAL_P(项目);}elsezend_throw_exception(NULL,"天哪!",0);}RETURN_LONG(total);}安装扩展phpize./configuremakemakeinstallecho"extension=sum.so">/etc/php.d/sum.ini查看扩展功能test.phpNewFileorProject->ImportExistingProject项目名称:php-src,位置为php源码编译目录Default默认构建配置: 补充: 清除步骤: 解决扩展引用头文件问题,添加“.” 运行配置: f5调试: 合约借鉴别人的扩展约定:把别人的扩展放在ext目录下,根据图片修改内容,按照上面的步骤调试即可。参考JoeWatkins的PHP扩展开发初学者(https://www.youtube.com/watch...)
