如何优雅的输出PHP调试信息

经常因为出现紧急bug而被老板骂的同事,为了更快的修复而直接利用线上的错误环境现场debug,并直接在页面上echo和dump。结果被老板发现了,又是一通臭骂。那么有没有什么办法更优雅的输出PHP调试信息呢?

这里提供一个方案:利用浏览器调试模式的Console

1,先定义一个php函数:

 1 function console($log=‘‘)
 2 {
 3     switch (empty($log)) {
 4         case False:
 5             $out = json_encode($log);
 6             $GLOBALS[‘console‘] .= ‘console.log(‘.$out.‘);‘;
 7             break;
 8
 9         default:
10             echo ‘<script type="text/javascript">‘.$GLOBALS[‘console‘].‘</script>‘;
11     }
12 }

2,在需要调试的地方直接调用它,递交的参数可以是字符串,也可以是数组。

3,在适当的位置调用无参数的console,用来输出调试信息,比如各类php框架入口文件的最底部

4,打开浏览器(比如chrome),载入页面后进入调试模式(比如按F12键),点击Console,你会发现所有数据都在这里等着你查阅。

5,其他用途
优秀的PHP开源框架ThinkPHP提供了输出运行状态的功能,你可以通过运行状态来了解某个页面在后台处理了多长时间。但是,很多人都注意到了,它是不准确的。

下面我们试着用刚刚加进来的自定义函数console在浏览器中输出真正的运行时间。
所有工作都在入口文件中完成:

在所有代码的最开头,定义变量$s=microtime(true);
在console();的上面再增加console(‘exetime:‘.round(microtime(true)-$s,4));

好了,我们来看看真正的运行时间吧:

这个课题就这么简单愉快的解决了。
PS:因为这个函数用到了json来输出数组,所以要求编码为UTF-8,如果使用其它编码可能会出现未知问题,需要留意。

原文地址:http://www.cnblogs.com/gidot/p/4307709.html

时间: 2024-12-15 12:33:52

如何优雅的输出PHP调试信息的相关文章

Debug模式应用程序输出Debug调试信息(现成的宏定义,用于格式化打印信息)

[cpp] view plain copy // Debug模式,主要输出一些调试的信息. #ifdef UNICODE #define _FILE_          _STR2WSTR(__FILE__) #define _FUNCTION_          _STR2WSTR(__FUNCTION__) #else #define _FILE_          __FILE__ #define _FUNCTION_          __FUNCTION__ #endif #defin

C#单元测试如何查看输出的调试信息?

在Visual Studio  2012的单元测试中使用: Console.WriteLine()输出的信息在"输出"面板都找不到??? ?查了不少资料,才得知在单元测试中打印的信息不显示在"输出"版面.那么显示在哪? 执行完单元测试之后,?会生成一个测试结果.其中就包含在程序运行中用: Console.WriteLine(),Trace.WriteLine() TestContext.WriteLine()等输出的信息. 1-在测试资源管理器中,找到"输

QT初体验1:如何学习QT之个人浅见,以及如何读取文本文件,在调试信息中输出。

2017年11月初,随着工作岗位的调动,我转到了研发岗,开始了漫漫程序员的成长之路.首先介绍下个人知识储备,大一学习过C语言,没有工程经验,所学是为了期末考试+2级考试,考完在大学+硕士期间没有用到编程. 来到新的工作岗位,心情是既激动又忐忑的,作为一名青铜段位程序员,我得好好规划下学习.成长的路径. 我选择的方法是,跟着项目走,工作中不可能给你大把时光来造作,去把厚厚的C++ Primer or C++ Primer Plus给通读一遍.带着任务去学习,学的最快.具体而言,我的学习思路是: 1

C语言使用宏输出调试信息实战

如何使用宏定义输出信息 C语言提供了#, ##, __VA_ARGS__等符号来帮助我们在宏定义中更好地输出信息.使用方式如下: 输出如下: #的作用是,它会在所引用的宏变量左右两边加一对引号.所以FUN1中的printf函数不会出错,因为FUN1(hello)预编译时被替换成了printf("hello\n") ##的作用是,把两个宏变量连接成一个,FUN2(1, 2)预编译时被替换成了printf("The num is %d\n", 12) 支持c99标准的编

C# trace debug TraceListener调试信息详解

在C#编程中,可能要碰到把调试信息输出的问题,我们可以自己把信息显示在某个控件上,但是MS自己提供了一套机制帮助我们输出一些调试信息,这些信息有助于我们判断程序的走向,不用自己再去额外写调试代码了. 一般调试的时候有两个很重要的类Trace, Debug, Trace帮助我们跟踪代码用,Debug帮助我们调试代码用.是否启用,取决于我们的设置: 比如这个只定义了Trace常量,表示只启用了Trace类. 先说说Trace类的结构(Debug类一样): Trace: Listeners:这是个Tr

Android的5种调试信息

华清远见2014-10-23   北京海淀区  张俊浩 verbose:不过滤所有的信息.啰嗦的意思. debug:debug调试的意思. info:一般提示的信息information warn:warning警告类型. error:错误信息 打印的格式为: Log.v(String tag, String msg);//VERBOSE Log.d(String tag, String msg); //DEBUG Log.i(String tag, String msg); //INFO Lo

am335x UART1输入u-boot 调试信息代码修改

AM335x 调试信息UART1输出代码修改1. 关于pin_mux  的配置代码修改位置:/board/forlinx/ok335x/mux.c 1 void enable_uart0_pin_mux(void) 2 { 3 configure_module_pin_mux(uart0_pin_mux_spl); 4 configure_module_pin_mux(uart1_pin_mux); 5 } 6 将这行代码打开. 代码跟踪流程:arch/arm/cpu/armv7/start.S

Android的5样的调试信息

华清2014-10-23   北京海淀区  张俊浩 verbose:只是滤全部的信息. 啰嗦的意思. debug:debug调试的意思. info:一般提示的信息information warn:warning警告类型. error:错误信息 打印的格式为: Log.v(String tag, String msg);//VERBOSE Log.d(String tag, String msg); //DEBUG Log.i(String tag, String msg); //INFO Log

监听按钮点击事件的三种方式实现及调试信息输出的三种方式实现

监听按钮点击事件的三种方式实现: 1.匿名内部类 2.外部独立类 3.接口实现 package com.example.button; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View;