程序的调试(堆栈的使用)
2015-06-14 17:27
239 查看
换新工作一个月,以前是做自动化测试的,对于代码的编译,调试一直都是停留在数据的输出,显示等层面的调试,从来没有考虑到更深的一层。汗颜。
正如领导所说。对于任何一个成熟的框架来说,都会有相应的log输出,如果仅仅是将将数据输出,显示进行调试,太机械了。作为一个开发人员,如何高效的的工作,高效的解决问题,这才是关键。
哈哈,不扯了,进入正题。
最近,在做一个线下网站的性能测试,需要找出线下网站的响应时间作为判断的标准。切入正题了。对于任何一个编程语言来说,都有对应的堆栈函数,便于用户进行调试程序,监控程序运行。
这一块,我们使用的是PHP debug_backtrace()函数,进行堆栈调试,同时将结果写入到对应的文本编辑器当中。
思路如下:将函数的堆栈输出以固定格式,输出到文件中。
我们在CI框架的外边,写了一个log文件,在这个log文件当中,我们根据编程语言的特性,在每一个函数运行的开始,输出打印函数执行的堆栈情况。
格式如下:
运行函数 运行函数对应的参数 当前时间 运行总时间 时间差
这种思路的输出方便程序猿查找问题。如何获取首次运行时间,我承认的是我的思路当时是乱的。领导的方法很简洁,就使用了bool类型值的使用。
源码如下:
is_first =false;
function test()
{
if(!is_first)
{
first_time=current_time;
is_first=true;
}
}
//第一次使用test函数通过改变布尔数值来获取第一次时间。
学习总结:
第一:任何一个好的框架肯定有对应的log输出,比如说CI框架有其对应log文件输出,而且用户可以设置。
第二:主流的编程语言都有其对应的堆栈函数。
技术总结:堆栈+函数构造+log写入文件=好的调试系统。
正如领导所说。对于任何一个成熟的框架来说,都会有相应的log输出,如果仅仅是将将数据输出,显示进行调试,太机械了。作为一个开发人员,如何高效的的工作,高效的解决问题,这才是关键。
哈哈,不扯了,进入正题。
最近,在做一个线下网站的性能测试,需要找出线下网站的响应时间作为判断的标准。切入正题了。对于任何一个编程语言来说,都有对应的堆栈函数,便于用户进行调试程序,监控程序运行。
这一块,我们使用的是PHP debug_backtrace()函数,进行堆栈调试,同时将结果写入到对应的文本编辑器当中。
思路如下:将函数的堆栈输出以固定格式,输出到文件中。
我们在CI框架的外边,写了一个log文件,在这个log文件当中,我们根据编程语言的特性,在每一个函数运行的开始,输出打印函数执行的堆栈情况。
格式如下:
运行函数 运行函数对应的参数 当前时间 运行总时间 时间差
这种思路的输出方便程序猿查找问题。如何获取首次运行时间,我承认的是我的思路当时是乱的。领导的方法很简洁,就使用了bool类型值的使用。
源码如下:
is_first =false;
function test()
{
if(!is_first)
{
first_time=current_time;
is_first=true;
}
}
//第一次使用test函数通过改变布尔数值来获取第一次时间。
学习总结:
第一:任何一个好的框架肯定有对应的log输出,比如说CI框架有其对应log文件输出,而且用户可以设置。
第二:主流的编程语言都有其对应的堆栈函数。
技术总结:堆栈+函数构造+log写入文件=好的调试系统。
相关文章推荐
- mysql 修改字符集为utf8mb4
- struts2 开发中,一些功能需要在struts.xml中的配置
- Java多线程生命周期
- 五大常用算法之一:分治算法
- 图片资源
- ImportError: No module named cv2 解决方法
- Hibernate配置文件说明
- NMS项目系列总结——debug篇(一)兼容性问题
- 爱的狄德罗效应
- 关于Class.forName(“com.mysql.jdbc.Driver”)--转
- git在windows常用命令
- svn权限配置
- 浅谈JavaScript中的Math.atan()方法的使用
- 21Exchange Server 2010跨站点部署-分支机构Ootlook登陆测试
- c++11 Chrono时间库
- 利用gdb在汇编指令级调试C程序
- Xcode6模拟器iOS8键盘出不来问题
- 邻接矩阵图的dfs和bfs
- loadrunner生成随机uuid的方法
- GIS数据格式topojson