GNU gprof 和 graphviz 调优程序

GUN gprof 是一款分析程序运行的工具,可以提供程序调用关系,函数运行次数以及函数运行时间,为程序员最大限度的优化自己的程序提供帮助。记得在《可视化函数调用》中提到了可视化工具graphviz,结合gprof 和graphviz,并利用gprof2dot 可以可视化以上以上信息。

几个工具使用起来都非常方便。使用gprof 只需要在运行参数前加 -g 即可。然后

./test

运行可执行程序,将生成gmon.out 的日志文件(这是程序员也看不懂的二进制文件),使用下面命令

gprof ./test gmon.out >report.txt

生成report.txt 表。

想使用gprof2dot 可视化这个报表就更简单了,在gprof2dot 官网 下载gprof2dot.py 执行(确保你安装了python 和graphviz):

gprof ./test | gprof2dot.py | dot -Tpng -o output.png

怎么样! 是不是生成了一个output.png 的图片,打开看看吧!

继续阅读

Valgrind Tutorial

Valgrind 是用于调试程序的工具套件,其中最有名的工具是Memcheck,它能够检测出C/C++ 中因为内存错误导致程序中断的问题。

一、引言

使用Valgrind 有两个必要条件:一安装了Valgrind;二需要在编译程序参数中加上 -g 选项;尽量不要使用  -O2 或者更高级别的代码优化,这样会导致Memcheck 误报未初始化的参数(uninitialised-value errors )。 调试方法非常简单,如果你的程序如下执行:

MyProg arg1 arg2 ...

那么这样使用如下命令:

valgrind --leak-check=yes MyProg arg1 arg2 ...

Memcheck 是默认工具(也可以用 –tool=memcheck 指定工具),–leak-check 选项打开了内存泄露检查工具。

继续阅读

一些关于矩阵的基础知识

一、特殊矩阵

正方矩阵/方阵( Square matrix )     大小为n×n 的矩阵

单位矩阵( Identity matrix )             对角线上元素为1,其余元素为0 的方阵,常用I 表示

置换矩阵( Exchange matrix )        反对角线上元素为1,其余元素为0 的方阵,常用J 表示

对角矩阵( Diagonal matrix )          非对角线上元素全为零的方阵

对称矩阵( Symmetric matrix )       满足矩阵中元素eij = eji   的方阵

三角矩阵(Triangle matrix)             分为上三角矩阵(元素eii 以上元素为零)和下三角矩阵

正交矩阵(Orthgonal matrix)          满足MTM = I 的方阵,矩阵和矩阵转置的乘积为单位矩阵

继续阅读

安装libcloud 遇到的一些问题

libcloud 是apache 的顶级项目之一,用于在多个云直接提供统一的接口,既可以用于云计算,也可以用于云存储,使用python 编写。下载手动安装libcloud 后没有问题,试着跑一个测试文件提示:

  File "/usr/local/lib/python2.7/ssl.py", line 60, in 
    import _ssl             # if we can't import it, let the error propagate
ImportError: No module named _ssl

判断为SSL module 没有安装, 试着

python -c "import ssl"

出现和之前一样的提示。接着参考这Compiling Python with SSL Support (Fedora 10) 重新下了python 编译下还是出现同样问题。

查看了下,openssl 安装了。转头想用官网上使用的pip 安装,但是得先用easy_install 安装,easy_install 是由PEAK(Python Enterprise Application Kit)开发的setuptools包里带的一个命令,所以使用easy_install实际上是在调用setuptools来完成安装模块的工作。但是在使用easy_install 命令时,提示错误:

Traceback (most recent call last):
  File "/usr/bin/easy_install", line 5, in 
    from pkg_resources import load_entry_point
ImportError: No module named pkg_resources

初步怀疑原因是setuptools 是使用命令:

sudo apt-get install python-setuptools

安装到/usr/bin 目录下,和python 的版本不一致导致的,网上有使用ez_setup.py 安装的方法(据说64 位只有这样安装才行),但还是有问题:

Downloading http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
Traceback (most recent call last):
  File "ez_setup.py", line 278, in 
    main(sys.argv[1:])
  File "ez_setup.py", line 212, in main
    from setuptools.command.easy_install import main
zipimport.ZipImportError: can't decompress data; zlib not available

按照官网中安装下载python2.7 对应的版本setuptools-0.6c11-py2.7.egg 安装setuptools 出现同样问题:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
zipimport.ZipImportError: can't decompress data; zlib not available
You have new mail in /var/mail/qing

参考stackoverflow 上的方法安装了一些包后可以

sh setuptools-0.6c11-py2.7.egg

安装对应版本的setuptools 了。只是安装在了/usr/local/lib/python2.7/site-packages/ 目录下,每次运行需要加上sudo 才有对应权限:

sudo easy_install pip

安装好pip 后更新了libcloud:

pip install --upgrade apache-libcloud

再使用SSL

python -c "from socket import ssl"

也没有提示之前问题了。

是不是有些小孩的家里有这样一个爸爸

这样的爸爸会说:你笨死了

这样的爸爸会说:你怎么这么笨

这样的爸爸会说:你看人家的小孩比爸爸聪明,你怎么这么笨

这样的爸爸会说:我当年你这么大的时候全班第一,可没你这么笨

最近看王小波的《黄金时代》里面主角王二也有这样一个爸爸,王二的爸爸从小全班第一一直到清华,要不是意外就留洋了,王二的爸爸就是这样的爸爸,是这样的爸爸的优秀代表。

我也有这样个爸爸,他成绩是不是全班第一就不知道了。但想想从“小霸王”流行那时起,这样的爸爸就对屁大点的我说:“人家都说小孩子玩游戏比大人强,‘邻居家的小孩’就比他爸爸厉害,你怎么我也玩不过呢?”。然后学五笔没有比过这样的爸爸,被这样的爸爸说“小孩子学电脑应该比大人快啊!”,可现在这样的爸爸还用五笔,我已经改用拼音了。后来一起背初中的课本勉强胜出,这样的爸爸说:“我像你这么大的时候虽然没有过目不忘,也没你这么没记性啊!”。直到前段时间接到这样的爸爸的电话,谈到假期在家打羽毛球时,这样的爸爸说:“你可能遗传了你妈妈的因素,运动细胞不是很好!但还是要多锻炼啊!”,说时甚是为我惋惜。

这样的爸爸如果只是在我家里也就罢了,可是可能很多家里都有这样的爸爸,虽然我家这样的爸爸不是这样的优秀代表,但也基本上算是典型代表了。

高中的时候女同学家里有个这样的爸爸的优秀代表,高学历,家庭富足。每次都抱怨该女同学笨,怎么没有遗传到这样的爸爸的半点基因。在这样优秀强势的爸爸面前,女生很是自卑和难受,虽然外表也还开朗、活泼。憋屈的时候找班主任哭诉恐怕没几人知道。

要在更远的范围找到这样的爸爸可能比较困难,因为这样的爸爸一般比较失意,时运不济或者机遇不佳,空有满腹才华无处施展。而这样的爸爸的子女既然是像这样的爸爸说的那么笨,比这样的爸爸还笨,就更出不了头了。有了上面推理,那么在更远范围的名人中找到这样的爸爸和这样的爸爸的子女就比较困难了。