2012-01-03 14 views

risposta

7

get_defined_vars() restituirà un array di tutte le variabili definite. È quindi possibile eseguire il ciclo di ciascuna di esse e scaricare il contenuto oppure utilizzare var_dump(get_defined_vars()) per scaricarle in blocco.

+2

Questo è corretto, tuttavia è bene notare che questo non sarà esattamente il codice di gestione delle eccezioni. Dovresti essere resopnsible per fornire questi all'eccezione durante il lancio dell'eccezione. Detto questo, non conosco alcun modo per ottenere lo stesso risultato nella gestione delle eccezioni. – Slavic

2

Prova var_dump(get_defined_vars());. Questo dovrebbe scaricare tutte le variabili definite nell'ambito.

0

È possibile avere tutti definiti (anche predefiniti) chiamando la funzione get_defined_vars.

Solo le variabili locali (ambito della funzione corrente) non sono disponibili senza alcuni strumenti di debug.

2

Penso che sia meglio impostare xDebug.

Scarica automaticamente tutti gli ambienti.

E otterrete ogni volta qualcosa di simile:

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* 

Si rende incredibilmente facile debug.

2

Il gestore di eccezioni non avrà mai accesso alle variabili locali della funzione che l'eccezione ha generato poiché tali variabili sono locali. Non penso che ci sia un modo per ottenere l'accesso alla tabella delle variabili di uno specifico frame dello stack dal codice PHP di userland.

È possibile eseguire questa operazione utilizzando xdebug come debugger di passaggi. Con i punti di interruzione (ad esempio nel gestore delle eccezioni) è possibile esaminare ogni frame dello stack.

Accanto a passo il debug, ci sono anche alcune opzioni di visualizzazione si potrebbe desiderare di fare uso di, come:

2

si ha accesso a variabili locali, se l'eccezione sarà catturato nello stesso scopo/funzione viene generato:

<?php 

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

?> 
Problemi correlati