
linux下调试
前进的蜗牛啊
一个程序员,现在依然在路上~
欢迎讨论技术问题,及对博客文章提意见
展开
-
如何查全局变量被越问题
全局变量被越一定是被相邻地址的全局变量越到的,用gdb跟踪打印出被越的地址address x/200b address-100 查看出附近的地址,然后用排除法,看代码。原创 2012-09-06 19:44:22 · 891 阅读 · 0 评论 -
关于mutex的一些思考
工作中遇到了死锁问题,先记录如下,欢迎大家提意见先说说锁的定义: 锁作为一种同步机制,是为了防止多个线程对临界资源的访问。 这里请注意是仅仅只是临界资源。再来看看死锁形成的机制:原创 2015-08-22 22:00:52 · 1274 阅读 · 0 评论 -
使用ld的wrap选项替换已有库函数
使用ld的wrap选项替换已有库函数很多时候,可能需要替换已有库函数,或者对其库函数进行修改。为了避免对那些静态链接库或者动态链接库文件大动干戈,我们可以使用ld提供的–wrap选项。例如,想把所有的malloc函数都作修改,以便让malloc出的内存都是32字节对齐的。我们可以给ld传选项“wrap=malloc”, 告诉ld,我们将替换名称为malloc转载 2016-03-15 19:18:48 · 983 阅读 · 0 评论 -
memcheck c/c++内存泄漏检测
系统编程中一个重要的方面就是有效地处理与内存相关的问题。你的工作越接近系统,你就需要面对越多的内存问题。有时这些问题非常琐碎,而更多时候它会演变成一个调试内存问题的恶梦。所以,在实践中会用到很多工具来调试内存问题。在本文中,我们将讨论最流行的开源内存管理框架 VALGRIND。摘自 Valgrind.org:Valgrind是用于构建动态分析工具的探测框架。它包括一个工具集转载 2016-03-15 20:08:40 · 1161 阅读 · 0 评论 -
在应用程序中替换Linux中Glibc的malloc的四种方法
转自:http://www.xuebuyuan.com/2223733.html打算优化系统的内存分配,接管glibc提供的内存管理,但是整个工程的代码量很大,使用malloc、realloc、calloc和free的地方到处都是,如果自己写好的接口需要重命名所有的调用,先不说工作量,部分没有权限查看代码的.a文件就搞不定了。所以需要转载 2016-03-15 20:25:36 · 2145 阅读 · 0 评论 -
new new[] 重载
内存管理运算符 new、new[]、delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数。一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内存时才会重载。重载 new 有两种形式://以类的成员函数的形式进行重载void * 类名::operator new ( size_t size ){ //TODO:}和转载 2016-03-15 20:40:03 · 1061 阅读 · 0 评论 -
c++ new 重载
转自:#include #include void * operator new(size_t unSize){ printf("operator new called\n"); return malloc(unSize);}void * operator new[](size_t unSize){ printf("operator [] called转载 2016-03-15 20:47:02 · 1124 阅读 · 0 评论 -
elf文件格式说明
1.ELF文件格式概貌readelf -h查看elf文件头部信息可以看到Type值有三种:REL,EXEC,DYN。REL文件是只被编译没有被链接过的文件,其格式属于左边一种,elf header+section1,2,3...+section header table,每个section对应一个section header table entry,section header转载 2016-04-05 15:53:45 · 1653 阅读 · 0 评论 -
linux backtrace追踪错误调用
一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。在glibc头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈。int backtrace(void **buffer,int size) 该函数用于获取当前线程的调用堆栈转载 2016-04-05 17:45:00 · 1719 阅读 · 0 评论 -
向正在运行的Linux应用程序注入代码f
from http://www.freebuf.com/articles/system/6388.html小编的话:感谢0×80的认真翻译,辛苦:) ,各位同学,不要吝惜你的顶和评论哦!原作者:Gregory Shpitalnik翻译:0×801、简介假设Linux上正在运行某程序,像Unix守护程序等,我们不想终止该程序,但是同时又需要更新程序的功能。首先映入转载 2013-12-01 16:48:41 · 1716 阅读 · 0 评论 -
使用graphviz绘制流程图
使用graphviz绘制流程图JAN 26TH, 2012写的太好了,留一份:from http://icodeit.org/2012/01/%E4%BD%BF%E7%94%A8graphviz%E7%BB%98%E5%88%B6%E6%B5%81%E7%A8%8B%E5%9B%BE/前言日常的开发工作中,为代码添加注释是代码可维护性的一个重要方面,但是转载 2013-11-07 14:03:14 · 5826 阅读 · 0 评论 -
关于内核转储
1.启用内核转储ulimit -c unlimited2.gdb + coregdb -c core ./a.out3.在专有文件系统里生成内核转储#cat /etc/sysctl.confkernel.core_pattern = /var/core/%t-%e-%p-%c.corekernel.core_uses_pid = 0#sysctl -p原创 2012-09-12 08:59:36 · 991 阅读 · 0 评论 -
用memwatch检测内存使用问题 (摘自memwatch readme)
debian:/home/yk/memwatch-2.71# cat README README for MEMWATCH 2.69 This file should be enough to get you started, and should be enough for small projects. For more info, see the files USING翻译 2012-10-13 11:35:12 · 631 阅读 · 0 评论 -
top 命令小结
top 进入;按H可以看见线程信息-------------------------------------------如果想看到线程具体调用,用gdb attach进程 info threads ; thread num ; bt; where以下转自http://blog.youkuaiyun.com/sanshiqiduer/article/details/193362原创 2012-11-22 15:00:40 · 480 阅读 · 0 评论 -
vim 编辑二进制文件
转自http://www.cnblogs.com/h2appy/archive/2009/04/07/1431105.html编辑二进制文件vim可以很方便地编辑二进制文件,个人认为它比emacs的二进制编辑方式更 好用。vim中二进制文件的编辑是先通过外部程序xxd来把文件dump成其二进制的 文本形式,然后就可以按通常的编辑方式对文件进行编辑,编辑完成后再用xxd 转化为原来的转载 2012-12-17 14:46:37 · 467 阅读 · 0 评论 -
系统不响应问题的调试
1.背景在调试一个项目的时候(ps:项目是cs模式),客户机发过来的命令服务器没有响应,命令阻塞2.过程调试的时候发现命令处理线程在阻塞在一个cmd处理上,cmd在等待数据处理线程返回。这两个线程使用unix socket通讯gdb收集到的信息有:1.命令处理线程read unix socket,没有收到数据,所以阻塞2.数据处理线程阻塞在condition wait上原创 2013-02-28 18:59:55 · 642 阅读 · 0 评论 -
使用checkpoint解决难以复现的Bug
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix.net 作为程序员,调试是一项很重要的基本功。调试的技巧和水平,直接决定了解决问题的时间。一般情况下,转载 2013-09-09 14:13:11 · 1308 阅读 · 0 评论 -
巧用Graphviz和pvtrace等工具可视化C函数调用
from http://guiquanz.github.io/2012/10/15/linux_c_call_trace/在分析复杂的C/C++软件时,如果有一个工具可以便捷的生成“函数调用关系图”,不是一件很好的事吗?如果你庆幸是一个Javaer或钟爱基于IDE(如Eclipse)的软件开发,应该会经常使用类似的工具。如果,你是*Nixer(*nix用户)呢?其实,我们一样有工具可用(地转载 2013-11-07 13:52:15 · 3588 阅读 · 2 评论 -
内存泄漏查找c++ new delete
#include #include struct MemIns{ void *pMem; int m_nSize; char m_szFileName[256]; int m_nLine; MemIns *pNext;};class MemManager{public: MemManager(); ~Mem转载 2016-04-05 18:52:54 · 1413 阅读 · 0 评论