博客首页
注册
建议与交流
排行榜
加入友情链接
推荐
投诉
搜索:
帮助
水龙卷
我是一个对自己进行debug的程序,所以行动迟缓些,不要见怪
waterspout.cublog.cn
管理博客
发表文章
留言
收藏夹
· 人工智能
· GSM 3GPP OMA
· Java
· W3C XML SVG
· 其他规范参考
· 病毒与安全
· 开源项目
· 专家blog
· 朋友的家
博客圈
音乐
相册
文章
· 前沿技术跟踪
· 数学,算法
}
· 每日一题
· Java虚拟机
· 分析,设计,复用
· 系统安全
· 规范与标准
· 库,内存,性能,系统
· 工具介绍
· 人工智能
· 小作品
· 随笔
首页
关于作者
姓名:何云龙 职业:Linux移动终端平台开发 介绍:走的更远些
||
<<
>>
||
我的分类
文章列表 - 库,内存,性能,系统
性能和内存问题的思考
<DIV>最近公司在新的产品上遇到了很多critical的问题,包括内存紧张,性能低下,还有随机的crash问题,其实在前一款产品中我们也碰到很多,并且解决了很多,但是在新的产品中引入了几个不重要但是对资源消耗又很大的模块,在硬件没有大的升级的情况下,本来就已经很勉强的系统当然会变得很脆弱。</DIV> <DIV> </DIV> <DIV>我在前一款产品中除了负责本模块的bug,主要精力是负责查找random crash的原因,由于有测试人员和同事的大力协助,发现了几个关键的crash point,因此他们觉得我似乎比较在行,实际上我能够做的,换了一个人只……
查看全文
发表于:2008-01-19 ┆
阅读(229)
┆
评论(0)
Crash问题小结
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt"><SPAN lang=EN-US>1。 删除仍然需要被使用的指针。</SPAN></P> <P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt"><SPAN lang=EN-US> 对于QT,如果有两个slot被连接到同一个signal上,在第一个slot中删除Signal Sender, 由于SignalSender的指针仍然在栈中,并且在处理下一个slot时需要被使用,造成程序会随机crash,而且crash时的backtrace可能已经被破坏。</SPAN></P> <P class=MsoNormal style="MARGIN-LEFT:……
查看全文
发表于:2007-08-10 ┆
阅读(168)
┆
评论(0)
取得函数调用栈 - __builtin_frame_address
<p>GCC提供了两个内置函数用来在运行时取得函数调用栈中的返回地址和框架地址</p><br><p><font color="#cccccc"><span style="color: rgb(0, 1, 2);">如果使用glibc 2.1或更新版本,可以使用backtrace()函数,</span><span style="color: rgb(0, 1, 2);">参看<execinfo.h>,其他系统可能有不同的技术支持。 </span></font><br><br> </p><p> <a name="IDX1185"></a> </p><br><table style="border-collapse: collapse;" bgcolor="#f1f1f1" border="1" bordercolor="#999999" cellpadding="0" cellspacing="0" width=……
查看全文
发表于:2007-08-08 ┆
阅读(336)
┆
评论(0)
内存问题检测 - mcheck
The GNU C library (glibc 2 a.k.a linux libc6) 提供了一些能够检测内存分配/使用问题的功能,比如使用未初始化的内存,忘记释放内存等。<br><br>环境变量MALLOC_CHECK_在前面已经介绍过,这里要介绍的是GNU的扩展,mcheck, 一个简单易用但也比较有限的工具。<br>使用mcheck需要包含头文件<mcheck.h>,并且在执行前调用mtrace()。而且它也不能给出更多信息,只能用作内存问题检测的参考工具。如果想在程序中间中止检测,可以调用muntrace()。<br><br><br>用法<br>$ export MALLOC_TRACE=<outputfilename> <br>$ <runprog……
查看全文
发表于:2007-08-08 ┆
阅读(316)
┆
评论(0)
修改信号处理函数 -- sigaction
<br> 程序在运行的时候经常会收到系统或其他进程发过来的信号,有时候我们希望改变对信号的缺省处理,这时候就需要使用信号处理程序了。<br><br><table style="border-collapse: collapse;" bgcolor="#f1f1f1" border="1" bordercolor="#999999" cellpadding="0" cellspacing="0" width="95%"><tbody><tr><td><p style="margin: 5px; line-height: 150%;"><code><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 204);">#</span><span style="color: rgb(255, 0, 0);">include</span> <span styl……
查看全文
发表于:2007-08-08 ┆
阅读(405)
┆
评论(0)
覆盖库函数pthread_create
最近新系统中出现了很多不知名的线程,为了弄清楚来源,于是作了一个动态库,覆盖了标准的pthread_create函数,在运行时造成系统 crash,从core-dump的report中就可以知道是那个函数启动了thread.<br><br>以前在做drm manager的时候,也是为了最小化应用程序对drm的依赖,作了一个库来封装对文件的读取,也就是覆盖了fopen, fread, fseek,fclose等。<br><br>要达到覆盖的目的,需要在启动客户程序之前设置环境变量LD_PRELOAD,对于那些非命令行启动的程序来说,可以由应用程序管理器调用函数setenv来设置。<br><br> <tabl……
查看全文
发表于:2007-08-07 ┆
阅读(203)
┆
评论(0)
使用环境变量MALLOC_CHECK_检查内存问题
<br>GNU C Library 可以根据环境变量MALLOC_CHECK_来决定是否在运行时可检测程序中的内存问题。而内存问题有时候表现得非常古怪,比如random crash, crash的点又经常变,甚至coredump中也没什么栈信息。这时候可以用这个方法来验证一下。知识还没办法打印出错点对应的地址,有些遗憾。<br><br>下面是一个内存越界的例子:<br> <table style="border-collapse: collapse;" bgcolor="#f1f1f1" border="1" bordercolor="#999999" cellpadding="0" cellspacing="0" width="95%"><tbody><tr><td><p style="margin: 5px; line-he……
查看全文
发表于:2007-08-07 ┆
阅读(309)
┆
评论(0)