首页 > php教程 > php手册 > 正文

一个小玩意PHP-Valgrind的介绍

php中文网
发布: 2016-06-06 20:10:24
原创
1505人浏览过

作者: Laruence( ) 本文地址: http://www.laruence.com/2013/08/14/2899.html 转载请注明出处 首先, 太久不更新博客了, 容我先啰嗦几句. 我一直以为人总是会挤出时间写博客的, 但现在看来我错了. 博客很久不更新, 倒不是说没有内容可以分享. 而是这一年来确

  • 作者: Laruence(一个小玩意PHP-Valgrind的介绍一个小玩意PHP-Valgrind的介绍一个小玩意PHP-Valgrind的介绍一个小玩意PHP-Valgrind的介绍)
  • 本文地址: http://www.laruence.com/2013/08/14/2899.html
  • 转载请注明出处

首先, 太久不更新博客了, 容我先啰嗦几句.

我一直以为人总是会挤出时间写博客的, 但现在看来我错了. 博客很久不更新, 倒不是说没有内容可以分享. 而是这一年来确实忙了很多, 本身工作上的事情就很多, 业余时间也被php项目上的事情, zend的事情填满. 再加上一些小感悟也都在微博上牢骚了… 所以….

Anyway, 很感谢各位经常来我博客的朋友, 不过我建议大家如果是提问的话, 不要在留言里, 有的时候会被博客当做SPAM, 有一些小问题, 可以来微博At我 @laruence

言归正传, 今天分享个前天刚刚做的小工具, 代码可以在我的github上找到: php-valgrind. 这个工具主要是为PHP脚本提供了可以在脚本中开启Valgrind(严格说是Callgrind)的Profile能力.

一般来说, 我们用Callgrind的时候, 如果要分析某一个函数, 可以通过toggle-collect=”函数名”, 来告诉Callgrind在进入这个函数的时候开始Profile. 但是这样没有办法分析具体某一段代码..

其实Callgrind提供了一个机制, 可以让我们在代码中控制何时开启: CALLGRIND_TOGGLE_COLLECT

立即学习PHP免费学习笔记(深入)”;

比如:

#include <stdio.h>
#include <valgrind/callgrind.h>

void foo(int a[100]) {
    int i = 0;
}

int main (int argc, char **argv) {
    int i, a[100];

    CALLGRIND_START_INSTRUMENTATION;
    CALLGRIND_TOGGLE_COLLECT;
    for (i=0; i<100; i++) {
        a[i] = 2;
    }
    CALLGRIND_TOGGLE_COLLECT;
    CALLGRIND_STOP_INSTRUMENTATION;
    return;
}
登录后复制

然后, 编译成a.out以后, 我们就可以分析具体的这个循环代码断的相关Profile信息:

$ valgrind --tool=callgrind --collect-atstart=no --instr-atstart=no ./a.out
登录后复制

之后生成的callgrind.out就可以被callgrind_annotate, kcachegrind等工具来分析了

牙齿口腔诊所网站模板源码1.0
牙齿口腔诊所网站模板源码1.0

医院诊所网站源码小兵系统基于PHP+MYSQL开发,在文章内容网站的基础上,增加了诊所介绍、医生介绍、诊疗内容、新闻中心、联系我们等医院网站常用的栏目和测试数据,采用适合医院网站的专用模版,增强了系统的针对性和易用性。系统具有文章、图文、表单、咨询等基本系统模块和一系列网站辅助功能,用户也可根据自身特点任意创建和修改栏目,适合创建各类医院诊所网站。

牙齿口腔诊所网站模板源码1.0 0
查看详情 牙齿口腔诊所网站模板源码1.0
$callgrind_annotate callgrind.out.27538
//OUTPUT:
--------------------------------------------------------------------------------
 Ir
---------------------------------------
617  PROGRAM TOTALS

---------------------------------------
 Ir  file:function
---------------------------------------
617  test.c:main [***dev/a.out]
登录后复制

是不是很方便呢?

但是呢, 有的时候, 比如我们做扩展, 或者其他的一类内部的性能分析的时候. 需要在PHP脚本也能做这样的触发. 就没有办法了. 于是我就写了这个小工具php-valgrind, 装好这个扩展以后, 来看个例子:

<?php
$a = array();
callgrind_toggle();
for ($i=0;$i<1000;$i++) {
    $a[$i] = 2;
}
callgrind_toggle();
登录后复制

然后我们开始分析:

$valgrind --tool=callgrind --collect-atstart=no --instr-atstart=no php /tmp/1.php
登录后复制

然后我们分析下输出:

-------------------------
       Ir
--------------------------
2,361,260  PROGRAM TOTALS

//以下省略
登录后复制

然后让我们用qcachegrind(带gui的callgrind分析工具), 来看看:
callgrind.output

可见, PHP要实现同样的功能需要的各种代码数相比C语言来说, 那可是多了N倍的(所以当然要比C慢了.. 嘿嘿, 再次申明: “C语言是最好的语言, 没有之一!”)

好了工具介绍完毕, 大家有兴趣的可以去玩玩, 这个工具还可以用来让我们了解, 我们的一个PHP代码, 会触发调用那些底层的函数, 或者系统调用等等, Enjoy~


Comments

  • 2013/08/14, 秋风 writes: 终于更新了,试试!
  • 2013/08/14, 夜丶有雪 writes: 前排留名、广告位招租 C语言是最好的语言, 没有之一!
  • 2013/08/14, pakey writes: 没有抢到沙发
  • 2013/08/14, 微历史 writes: 保持更新很重要
  • 2013/08/14, 风逐蓝天 writes: PHP 是最好的语言~~~
  • 2013/08/14, php230 writes: V5
  • 2013/08/14, 我叫张大熊 writes: 微博私信问了你一个问题 可是还没有得到回答 求回答啊
  • 2013/08/14, 我叫张大熊 writes: 微博私信问了你一个问题 可是还没有得到回答 求回答啊
  • 2013/08/15, eagle writes: 需要另行安装Callgrind吗?
  • 2013/08/15, eagle writes: 需要另行安装Callgrind吗?
  • 2013/10/14, wclssdn writes: 我也在微博问过大牛好几个问题.. 就是不理我... 汗... 还有. 类似大牛的这个工具可以用xhprof.. 有图片展示方式... 太直观了... 数据表格也更丰富...
  • 2013/12/18, goodboy writes: “C语言是最好的语言” ......
  • 2014/02/19, Winona writes: I was curious if you ever thought of changing the page layout of your website? Its very well written; I love what youve got to say. But maybe you could a little more in the way of content so people could connect with it better. Youve got an awful lot of text for only having one or two pictures. Maybe you could space it out better?
  • 2014/02/27, real estate preview writes: ?e're a ?roup ?f volunteers and starting a brand new scheme in ?ur community. Your web site provided us with u?еful information to work on. You have done a formidable job and ouг whole gro?p can be thankful to you. ?ere i? my blog: real estate preview
  • 2014/09/10, computer repairs, apple mac pro reviews, cell phone repair, computer support,mercadolibre writes: Its 23-inch screen is already written on Apple's website because "Discontinued. As a result, the smaller sized or thinner the notebook, the lesser the capabilities in view that they are pressured to go out some ports. Feel free to visit my web blog: computer repairs, apple mac pro reviews, cell phone repair, computer support,mercadolibre
  • 2014/10/17, Nigel writes: 模板大神而来~~~~~

Related posts:

  • 注意PHP对字符串的递增运算
  • GCC优化引起的一个”问题”

Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2)
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号