在使用PHP-X开发PHP拓展的过程中,发现一个非常奇怪的bug
在频繁地调用zend_wrong_paramers_count_error
这个Zend API方法后,会导致发生core dump。这个方法的作用是抛出一个入参参数数量不正确的Warning级别异常
先看看我们的源码:
|
|
使用gdb对core进行分析
看到这个backtrace后一头雾水,貌似是跟php的内存管理扯上边了?但其实不然
经过长时间的debug发现,原来是我的拓展某行代码写错了,导致发生了这种问题。
直接上我们的代码:
我们来看看PHPX_METHOD
这个宏的定义
注意上面的代码中printArgs(args);
这一行代码传入了args参数,而从PHPX_METHOD
定义我们可以看到,args是一个引用参数,但是在printArgs()
函数定义时,没有把args作为引用参数而导致了错误。初步猜测是因为传参过程中,一些对象复制的问题导致了错误
正确写法应该是把void printArgs(Args args)
改为void printArgs(Args &args)
问题最终顺利解决~