Получить возвращаемое значение функции в расширении PHP C ++ - PullRequest
0 голосов
/ 20 ноября 2018

Я создал расширение 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 ]

0 голосов
/ 29 ноября 2018

Наконец-то я понял.

zval **return_value_ptr = &EX_TMP_VAR(execute_data, execute_data->opline->result.var)->var.ptr;

return_value_ptr имеет возвращаемое значение текущей выполняемой функции.

0 голосов
/ 20 ноября 2018
zval *rvalue = *(data->original_return_value);    // crashing here

Это из-за последнего разыменования original_return_value.Либо объект данных, либо original_return_value неинициализированы, либо повреждена память.

...