Получить возвращаемое значение функции в расширении PHP C++
Я создал расширение php в C++, которое отслеживает граф вызовов каждого запроса (centos7-64 bit,PHP5.6). И теперь я хочу получить возвращаемое функцией значение каждой функции. Это можно сделать с помощью структуры zend_excute_data (original_return_value).
zend_execute_data *data;
data = EG(current_execute_data);
if(data->original_return_value)
{
zval *rvalue = *(data->original_return_value); // crashing here
switch (Z_TYPE(argument_element))
{
..
..
..
}
}
Здесь, при назначении original_return_value для rvalue, мое расширение php получило сбой. Это правильный способ сделать? или что-нибудь еще.
2 ответа
Наконец то я понял.
zval **return_value_ptr = &EX_TMP_VAR(execute_data, execute_data->opline->result.var)->var.ptr;
return_value_ptr имеет возвращаемое значение текущей выполняемой функции.
zval *rvalue = *(data->original_return_value); // crashing here
Это из-за последней ошибки original_return_value
, Либо объект данных, либо original_return_value неинициализированы или повреждены в памяти.