2012-01-03 12 views

Respuesta

7

get_defined_vars() devolverá una matriz de todas las variables definidas. A continuación, puede recorrer cada uno y volcar los contenidos, o usar var_dump(get_defined_vars()) para volcarlos en masa.

+2

eso es correcto, sin embargo, es bueno tener en cuenta que esto no será exactamente el código de gestión de excepciones. Tendría que ser responsable de proporcionar estos a la excepción al lanzar la excepción. Dicho esto, no sé de ninguna manera que pueda lograr lo mismo en la gestión de excepciones. – Slavic

2

Probar var_dump(get_defined_vars());. Eso debería volcar todas las variables definidas en el alcance.

0

Puede haberlo definido todo (incluso predefinido) llamando a la función get_defined_vars.

Las variables locales (alcance de la función actual) no están disponibles sin algunas herramientas de depuración.

2

Creo que es mejor configurar xDebug.

Volca todo el entorno de forma automática.

Y obtendrá cada vez que algo como:

Catchable fatal error: Argument 1 passed to RogoDeal::getDealerForMe() must be an instance of RogoParticipant, instance of myUser given in G:\webroot\v1-1-5.omyconf\lib\model\doctrine\RogoDeal.class.php on line 512 

Call Stack: 
    0.0002  336944 1. {main}() G:\webroot\v1-1-5.omyconf\web\frontend_dev.php:0 
    0.1244 1983360 2. sfContext->dispatch() G:\webroot\v1-1-5.omyconf\web\frontend_dev.php:13 
    0.1244 1983392 3. sfFrontWebController->dispatch() G:\webroot\symfony\lib\util\sfContext.class.php:170 
    0.1248 1987104 4. sfController->forward() G:\webroot\symfony\lib\controller\sfFrontWebController.class.php:48 
    0.1500 2085896 5. sfFilterChain->execute() G:\webroot\symfony\lib\controller\sfController.class.php:238 
    0.1504 2086752 6. sfRenderingFilter->execute() G:\webroot\symfony\lib\filter\sfFilterChain.class.php:53 
    0.1504 2086752 7. sfFilterChain->execute() G:\webroot\symfony\lib\filter\sfRenderingFilter.class.php:33 
    0.1508 2087584 8. sfBasicSecurityFilter->execute() G:\webroot\symfony\lib\filter\sfFilterChain.class.php:53 
    0.1512 2087584 9. sfFilterChain->execute() G:\webroot\symfony\lib\filter\sfBasicSecurityFilter.class.php:72 
    0.1515 2088408 10. sfCacheFilter->execute() G:\webroot\symfony\lib\filter\sfFilterChain.class.php:53 
    0.1549 2089920 11. sfFilterChain->execute() G:\webroot\symfony\lib\filter\sfCacheFilter.class.php:65 
    0.1553 2090744 12. sfExecutionFilter->execute() G:\webroot\symfony\lib\filter\sfFilterChain.class.php:53 
    14.8569 19778472 13. sfExecutionFilter->handleView() G:\webroot\symfony\lib\filter\sfExecutionFilter.class.php:47 
    14.8570 19778472 14. sfExecutionFilter->executeView() G:\webroot\symfony\lib\filter\sfExecutionFilter.class.php:116 
    14.8662 19806016 15. sfPHPView->render() G:\webroot\symfony\lib\filter\sfExecutionFilter.class.php:155 
    14.8673 19806352 16. sfPHPView->renderFile() G:\webroot\symfony\lib\view\sfPHPView.class.php:185 
    14.8801 19926728 17. require('G:\webroot\v1-1-5.omyconf\apps\frontend\modules\program\templates\markedSuccess.php') G:\webroot\symfony\lib\view\sfPHPView.class.php:75 
    16.2403 21796104 18. sfOutputEscaperIteratorDecorator->getDealerForMe() G:\webroot\v1-1-5.omyconf\apps\frontend\modules\program\templates\markedSuccess.php:48 
    16.2403 21796304 19. sfOutputEscaperObjectDecorator->__call() G:\webroot\v1-1-5.omyconf\apps\frontend\modules\program\templates\markedSuccess.php:48 
    16.2404 21796552 20. call_user_func_array() G:\webroot\symfony\lib\escaper\sfOutputEscaperObjectDecorator.class.php:64 
    16.2404 21796736 21. RogoDeal->getDealerForMe() G:\webroot\symfony\lib\escaper\sfOutputEscaperObjectDecorator.class.php:64 

Dump $_SERVER 
    $_SERVER['REQUEST_METHOD'] = 'GET' 
    $_SERVER['REQUEST_URI'] = '/frontend_dev.php/program/marked?interface=mobile' 
    $_SERVER['HTTP_USER_AGENT'] = 'Opera/9.80 (Windows NT 6.1; U; Edition Ukraine Local; ru) Presto/2.10.229 Version/11.60' 
Dump $_REQUEST 
    $_REQUEST['interface'] = 'mobile' 

Variables in local scope (#21): 
    $dealer = *uninitialized* 
    $me = *uninitialized* 
    $owner = *uninitialized* 

Se hace increíblemente fácil de depuración.

2

El controlador de excepciones nunca tendrá acceso a las variables locales de la función que generó la excepción porque esas variables son locales. No creo que haya una forma de obtener acceso a la tabla de variables de un marco de pila específico del código PHP de usuario.

Puede hacerlo utilizando xdebug como depurador de pasos. Con los puntos de interrupción (por ejemplo, en el manejador de excepciones), puede examinar cada marco de pila.

Al lado de depuración paso a paso, también hay algunas opciones de visualización es posible que desee hacer uso de, como:

2

se tiene acceso a las variables locales, si la excepción será atrapado en el mismo ámbito de funciones/se lanza:

<?php 

try 
{ 
    $var = 123; 
    throw new Exception(); 
} 
catch (Exception $e) 
{ 
    var_dump($var); // int(123) 
} 

?> 
Cuestiones relacionadas