我正在尋找一種方法讓我的異常處理程序轉儲引發異常的函數的局部變量。這是可能的嗎?PHP:如何轉儲異常處理程序中的所有本地變量
8
A
回答
7
get_defined_vars()
將返回所有已定義變量的數組。然後,您可以遍歷每個內容並轉儲內容,或使用var_dump(get_defined_vars())
將其全部轉儲。
2
嘗試var_dump(get_defined_vars());
。這應該轉儲範圍內的所有定義的變量。
0
您可以通過調用函數get_defined_vars定義所有(包括預定義的)。
只有局部變量(當前函數的作用域)在沒有某些調試工具的情況下不可用。
2
我覺得更好的是設置xDebug。
自動轉儲所有環境。
,您將獲得每次是這樣的:
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*
這使得非常容易調試。
2
異常處理程序永遠不會訪問異常引發的函數的局部變量,因爲這些變量是局部變量。我不認爲有一種方法可以從userland PHP代碼訪問特定棧幀的變量表。
您可以使用xdebug作爲步調試器來完成此操作。通過斷點(例如,在異常處理程序中),您可以查看每個堆棧幀。
下一步步調試,也有你可能想利用一些顯示選項,如:
2
您可以訪問局部變量,如果異常會夾在同一範圍/職能是拋出:
<?php
try
{
$var = 123;
throw new Exception();
}
catch (Exception $e)
{
var_dump($var); // int(123)
}
?>
相關問題
- 1. php:在異常處理程序中處理異常?
- 2. 如何全局處理Yesod中所有處理程序的異常?
- 3. 如何獲得所有本地變量的轉儲?
- 4. PHP重置錯誤/異常處理程序回到本地?
- 5. 如何處理本地異常?
- 6. 如何處理@ControllerAdvice中所有未處理的異常?
- 7. 如何處理所有異常
- 8. 在全局異常處理程序中處理線程異常?
- 9. 處理所有異常
- 10. 如何看待矢量異常處理程序中的0x40010006異常?
- 11. 如何用Linux內核中的用戶定義處理程序替換缺省處理程序,該處理程序處理生成核心轉儲的異常?
- 12. 如何寫IOException異常處理程序
- 13. php異常處理異常
- 14. 如何從一個異常處理程序轉到另一個異常處理程序?
- 15. 何處/如何存儲或處理大量自定義異常?
- 16. CLR存儲過程中的全局異常處理程序
- 17. Axis2:服務級別上的所有異常的異常處理程序
- 18. 如何理想地處理Socket異常?
- 19. Java:異常處理程序
- 20. 異常處理程序
- 21. 漁獲global.cs所有的異常處理程序
- 22. 爲類內部拋出的所有異常設置異常處理程序?
- 23. 如何線程的異常傳播迴應用程序異常處理程序
- 24. 應用程序域如何在異常處理中有用?
- 25. 錯誤處理程序中拋出的PHP異常不會被異常處理程序捕獲
- 26. RestController中的Spring異常處理程序
- 27. 處理新程序中的異常
- 28. 程序中的PL/SQL異常處理
- 29. C++程序中未處理的異常
- 30. 異常處理程序,使變量不可用
這是正確的,但它是很好的注意,這也不會是完全的異常處理程序代碼。在拋出異常的時候,你必須被重新提供給異常。這就是說,我不知道你有什麼辦法可以在異常處理中做到這一點。 – Slavic 2012-01-03 13:08:20