QT程序与gprof
gprof能分析出函数的调用关系以及占用时间,对分析程序性能瓶颈很有帮助。
在采用QT开发时,如果程序分成若干个库,那么仅仅在编译时加入-pg选项是不能产生gmon.out文件,还必须在链接选项中也加入-pg才可以。在pro文件中做如下设置即可:
QMAKE_CXXFLAGS += -pg QMAKE_LFLAGS += -pg
让人比较郁闷的是,gprof不支持动态链接库和Multi-Thread程序。这实在是非常大的局限。
gprof能分析出函数的调用关系以及占用时间,对分析程序性能瓶颈很有帮助。
在采用QT开发时,如果程序分成若干个库,那么仅仅在编译时加入-pg选项是不能产生gmon.out文件,还必须在链接选项中也加入-pg才可以。在pro文件中做如下设置即可:
QMAKE_CXXFLAGS += -pg QMAKE_LFLAGS += -pg
让人比较郁闷的是,gprof不支持动态链接库和Multi-Thread程序。这实在是非常大的局限。
最近在Linux系统开发程序,一直被一个问题困扰:
在单步调试程序时,程序总是莫名其妙地跳转,没走几步又跳回函数入口;或者干脆跳到一个莫名其妙的、不怎么相干的地方去。
这导致基本上没办法进行单步跟踪调试。一直以为是Linux开发环境太烂了,或者可能是多线程程序调试困难,因此不得不通过加入打印的方式进行调试,费时费力,很不爽。
今天看到一篇文章,讨论了gcc/g++的编译开关-O2,即著名的编译优化开关,传说中能改进程序速度的开关。引起我注意的是,这个开关会“优化”掉代码行的关系,会对代码组织方面进行优化。联想到我遇到的调试问题,不正是无法定位正确的代码行吗?因此检查配置文件,删除了所有的-O2开关,重新编译所有文件。
世界果然清净了!单步跟踪完全没问题,老老实实一步一步地运行!
关闭开关后编译的程序,比打开开关的程序没慢多少。从这个角度将,打开-O2开关实在有些得不偿失。整个程序的优化,还是应当依靠代码设计和实现的优化,通过编译器来优化,结果难以预料,而且优化效果也不明显。
2012-02-24 updated: qmake在debug版本中缺省不加-O2选项,而在release版本中会缺省加上-O2选项。
一直在本机(kubuntu)上调试和运行MySQL数据库,工作状况良好。某次重启后,再用mysql客户端连接server时,居然出现以下信息:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)
检查了一下/var/run/mysqld目录,没有发现任何文件。使用命令ps -A | grep mysql,居然没有发现mysqld进程! mysql居然没有启动!
重新启动mysql服务器(sudo service mysql start)失败,检查/var/log/mysql/error.log,发现mysql启动时crash,不明所以。
后来google了N个帖子后,按照某个帖子的建议,修改/etc/mysql/my.cnf文件,注释掉其中的bind_address行,重启mysql居然就成功了。
可是以前一直工作得很好,没有做过任何改动,诡异啊。
是英国报先骂的“全是笼狗”,还是孔庆东先骂的“很多走狗”?
答:英国报先骂的。
是香港人先骂大陆人“全是蝗虫”,还是孔庆东先骂香港人“部分是狗”?
答:香港人先骂的。
是英国大人先在香港地铁里吃东西,还是大陆小孩先在香港地铁里吃东西?
答:英国大人。
是外国猛男强奸香港女人是殖民,还是大陆妈妈在香港产子是殖民?
答:强奸。
是英国先衰落的,还是香港先衰落的?
答:英国。
美国总统和香港人,谁更瞧得起大陆人?
答:美国总统
以上文字转载自天涯。
新闻是广东某地。让我困惑的是,维持治安不是警察的职责么?破不了案的警察难道不可耻吗?干点本职工作,政府就可以奖励20万?那这些警察平时的“本职工作”是什么?
据说当地个体户还募捐了另外20万奖励警方。。。这算什么?
目前发现比较好的SIP终端软件有以下两个,
CSipSimple : http://code.google.com/p/csipsimple/
SipDroid : http://sipdroid.org/
CSipSimple的口碑似乎还不错。看了一下它的网站,CSipSimple采用了pjsip协议栈,这个协议栈终端设备中有广泛的应用。
2013-09-13 updated:根据最新消息,下个版本的Asterisk很有可能选择pjsip作为新的sip协议栈。
这个命令主要用于进行deb包的安装和查询等。
build deb包,示例:将/tmp/debian_packages目录下的文件打包成demo.deb文件
dpkg-deb -b /tmp/debian_packages ./demo.deb
查询deb包中的文件内容:
dpkg-deb -c demo.deb
安装deb包
dpkg -i demo.deb
网上搜了一下,居然有推荐“先删除字段,再重新添加字段”的做法。如果该字段原来有一些非缺省值的记录,岂不是就丢失了吗? 这真是一点都没有爱啊。
比较有爱的做法是:使用MySQL提供的alter table语句对字段直接进行修改。
例如对tbl_local_users表中的moMaxCalls字段修改缺省值为1,可以采用以下语句:
alter table tbl_local_users alter moMaxCalls int default 1;
如果需要修改字段的类型或者变动位置,则需要用“change column”,例如:
alter table tbl_local_users change moMaxCalls int default 1 after emailAddr;
常见的理由是有一个强大的V8 javascript引擎。而最近在研究Ajax时,无意发现Chrome和IE在处理HTTP基础协议时,实际上也存在很大的差异,这些差异可以导致即使处理HTML/JS文件时,两者的处理速度也会很不一样。
测试时采用Apache 2.2.20(Ubuntu)作HTTP服务器。
在Apache中设置Cache-Control,指定no-cache,我们来看看Chrome和IE会怎么处理。
Chrome发送GET请求,包含If-None-Match以及If-Modified-Since等重要参数。Apache比较对应的ETag以及Last-Modified,发现文件没有改变,因此仅返回”304 Not Modified”。可见,Chrome直接使用了自己Cache的内容,并没有理会no-cache指示。
而IE呢?IE理会了no-cache指示,因此在GET请求中,老老实实地抹掉了If-None-Match以及If-Modified-Since参数,Apache返回200OK并重新携带请求的内容,IE重新处理返回的内容。
从对no-cache参数的字面理解看,IE的处理是正确的,而Chrome显得比较奸诈。
对于某些情况,我们确实需要强制浏览器端重新获取内容(尤其是对javascript文件),此时在Apache中不仅要设置no-cache,还必须设置no-store。
同时设置no-cache和no-store后,IE/Chrome都会向Apache重新请求内容,并刷新本地内容。
在windows中我们可以安装HxD来查看十六进制文件的内容,在Linux下,更简单,直接使用hexdump命令即可。
例如,我们想查看sysTbl.dat文件的内容,可以使用以下命令
hexdump sysTbl.dat -C