PHP调试:结合foreach和exit

时间:2011-02-26 01:03:52

标签: php debugging

在调试时,如果我可以退出()并使用foreach打印数组的各个元素,这将有所帮助。有什么想法吗?

5 个答案:

答案 0 :(得分:2)

如果要轻松打印数组内容或任何其他PHP值,请使用var_dump。调用exit()与此正交,我认为写得非常清楚:

var_dump($arr);
exit(1);

另一种技术是记录输出,如果您不想筛选输出HTML以查找var_dump的输出,则可能更有用:

error_log(var_export($arr));
exit(1);

答案 1 :(得分:1)

也许您可以使用print_r进行调试的调试退出函数(打印人类可读的变量版本)

function dexit($array, $status = 0) {
    print_r($array);
    exit($status);
}

然后,在代码中的任何地方,您都可以

dexit($array);
// or
dexit($array, 0);

但是以任何方式内联使用print_r并不困难:)

答案 2 :(得分:1)

听起来不是调试恕我直言的最理想方式,但这可以通过使用register_shutdown_function()来实现:

http://php.net/manual/en/function.register-shutdown-function.php

e.g:

    function debug_print_array(){
           global $array;
           foreach($array as $key => $val){
                echo "$key: $val\n";      
           }
    }

register_shutdown_function('debug_print_array');

答案 3 :(得分:1)

试试这个,你有两个选项,debug或var_dump

function debug_exit($array, $type = 1) {
    if ($type == 1) { print_r($array); } 
    if ($type == 2) { var_dump($array); } 
    exit();
}

答案 4 :(得分:0)

以下是我使用的内容x_r()。跟踪来自PHP文档中的this example。跟踪的原因是您/其他人可以找到aprx通过哪个/ x_r()进行调用。如果您需要在exit()

下出于某种原因查看主题,则print_r()是可选的
// Exits with a print_r and call trace for debugging

if (!function_exists('x_r')) {
    function x_r($obj, $exit = true, $return = true) {

        // echo the obj first
        echo '<pre style="background: #FFFFFF;">', print_r($obj, $return), '</pre>';

        // include a debug call trace
        $e = new Exception();
        $trace = explode("\n", $e->getTraceAsString());

        // reverse array to make steps line up chronologically
        $trace = array_reverse($trace);
        array_shift($trace); // remove {main}
        array_pop($trace); // remove call to this method
        $length = count($trace);
        $result = array();

        for ($i = 0; $i < $length; $i++) {
            $result[] = ($i + 1)  . ')' . substr($trace[$i], strpos($trace[$i], ' ')); // replace '#someNum' with '$i)', set the right ordering
        }

        // echo call trace
        echo '<pre style="background: #FFFFFF;">', print_r($result, $return), '</pre>';

        if ($exit === true) {
            exit();
        }
    }
}

这是要点:https://gist.github.com/dhaupin/d9d48328dbe312f6c0de