Получить возвращаемое значение функции в расширении 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 неинициализированы или повреждены в памяти.

Другие вопросы по тегам