摘要: 扬长避短使用Windbg和Visual Studio高效调试调试你的代码 经常被问及这样的问题: 你为什么非要使用Windbg调试你的程序? 记得有一次面试的时候笔者也被问到这样的问题,我的回答是:不是我非要使用Windbg, 只是在不同的情况下使用不同的工具会更加方便而高效。 那么这两者到底有什么区别?在什么情况下用什么工具会更方便呢? 所谓尺有所短,寸有所长,那么笔者就总结一下在什么情况下用什么工具会更方便,可能不是100%的全面,但是应该可以说明一定的问题,希望给初学者以指引。 Case 1: 分析.dmp文件的时候,可以使用Windbg和Visual St... 阅读全文
posted @ 2012-06-24 08:34 SolidMango 阅读(6645) 评论(7) 推荐(3) 编辑
摘要: 浮躁的程序员经常看到一些程序员整天忙的不亦乐乎,甚至奋斗到天黑,苦战到半夜..包括我自己,也时而不时的加班,那么造成这些的原因是什么呢?别告诉我你的工作太多,老板压榨你!同在一个公司,为什么有些人就可以很快的完成人家的工作?是人家的工作比你少么?不见得吧?那到底是什么原因让好多人这么痛苦呢?我们从技术,做人,团队,理想和阶段几个方面对各种人的忙加以分析。良性的忙:作为一个程序员尤其是一个对好多东西还不熟悉的程序员,包括技术,业务,行业知识,而此时我们有时很有理想的时候,我们会感觉很忙,因为这是起步阶段,忙些是应该的,万事开头难,这个时候的坚实的基础是未来轻松高效做事的基础,所以这个时候我们很忙 阅读全文
posted @ 2012-06-22 17:42 SolidMango 阅读(4177) 评论(29) 推荐(7) 编辑
摘要: STL map 内存改变,迭代器失效,_Isnil(_Ptr)和红黑树最近在做项目时发现一个crash的问题,当时得到的dmp文件显示crash在一个以map为循环变量的循环中,crash位置在如下的代码中标出。void_Inc(){//movetonodewithnextlargervalue#if_HAS_ITERATOR_DEBUGGINGif(this->_Mycont==0||_Ptr==0||_Isnil(_Ptr)){_DEBUG_ERROR("map/setiteratornotincrementable");_SCL_SECURE_OUT_OF_RA 阅读全文
posted @ 2012-06-22 10:32 SolidMango 阅读(2963) 评论(2) 推荐(0) 编辑
摘要: 程序员,代码,理想,老男孩 青春如同奔流的江河,一去不回来不及道别,只剩下麻木的我没有了当年的热血,看那漫天飘零的花朵,在最美丽的时刻凋谢,有谁会记得这世界她来过.. 当初的愿望实现了吗,事到如今只好祭奠吗,任岁月风干理想再也找不回真的我,抬头仰望着满天星河,那时候陪伴我的那颗,这里的故事你是否还记得.. 研究生毕业以后作为一个全职的程序员写代码已经5年时间了,想想时间过得真快,在这几年里学到了很多东西,也有幸遇到了一些大牛,挚友。终于在这个城市里面有了自己的一个小家,这几天为这个小家忙忙碌碌的跑跑装修,家具,也见了不少的人,做过一些沟通和交流,总结一下,突然感觉整天钻研技术确实... 阅读全文
posted @ 2012-06-17 20:45 SolidMango 阅读(2490) 评论(19) 推荐(7) 编辑
摘要: 由级别和性格特征将程序员分类 ---看看你属于哪一种 想写这篇文章已经很久了,一直没有时间,今天终于闲下来,于是有了这篇文章,本文只代表本人的个人观点,可能不全面或者有偏差,请不要对号入座或者钻牛角尖。本文只分类,不评价,不多说,下面开始进入正题。 首先从性格特征分类: 急功近利型:作为一个特殊的群体,很多程序员背负着很大的压力,包括生活的和社会的,这都可以理解,于是很多人把这些东西也带到了工作上,干什么都只求速度,到最后也没积累下什么。 不懂装懂型:这种人应该很多的,明明自己不懂的东西却装的自己是个大牛,夸夸其谈。 粗犷实践性:写代码本来就是一项实践,实践出真... 阅读全文
posted @ 2012-06-14 22:50 SolidMango 阅读(3116) 评论(13) 推荐(3) 编辑
摘要: 我为什么要学习C++反汇编 写在开始从6月7日开始到今天已经有5天了,在这5天的业余时间(工作之余)里终于系统的完成了C++反汇编的大部分问题的学习,今天写篇总结,算是对这几天学习的总结。首先我想说明的一个问题就是我为什么要花时间研究C++反汇编?这事得从笔者遇到的一个问题开始说起,大约2周前我们项目做在开发过程中遇到了一个Crash的问题,由于只有客户提供的一个.dmp文件,我们只能从这个地方入手,说起来很奇怪,从C++代码的角度根本看不出来问题,我找来了一个传说中的公司的大牛,大牛就在我面前给我详细的分析了一遍这个转储文件,感觉他看反汇编出来的代码就像看C++源代码一样,看问题也会更透彻, 阅读全文
posted @ 2012-06-11 18:04 SolidMango 阅读(6211) 评论(12) 推荐(8) 编辑
摘要: 最近在分析C++ dump 文件的时候觉得有必要将一些必要的反汇编东西总结一下以备别人参考,自己有时间的时候也可以进行更多的改进。下面通过一个简单的C++代码转成汇编代码后的详细解释说明一下C++和汇编的对应关系,以及如何识别汇编代码中进行的一些操作的意义。代码的调用关系如下图所示:完整C++代码下:intInternalFunctionA(intnSizeA1,intnSizeA2){intlocalnSizeA1=nSizeA1;intlocalnSizeA2=nSizeA2;intnFunctionA=localnSizeA1+localnSizeA2;returnnFunctionA; 阅读全文
posted @ 2012-06-08 13:34 SolidMango 阅读(3811) 评论(12) 推荐(3) 编辑
摘要: 上文说明了C++反汇编后的EBP,ESP寄存器都是做什么用的,相信大家已经有所了解,如果有没看过的请参考下文:http://www.cnblogs.com/pugang/archive/2012/05/25/2518499.html本文不会对其再做过多的讲解,如果还有问题,欢迎大家留言讨论。首先明确本文要解决的问题:在没有源代码的情况下如何看明白我们的汇编代码中哪些是局部变量。为了便于说明我将C++代码和汇编代码在一起,完整代码如下:intInternalFunctionA(intnSizeA1,intnSizeA2){00401000pushebp00401001movebp,esp0040 阅读全文
posted @ 2012-06-07 18:47 SolidMango 阅读(3041) 评论(0) 推荐(2) 编辑
摘要: 首先解释一下,什么是堆内存? 堆是一种常见的内存管理器,应用程序通过堆来动态地分配和释放内存,通常使用堆的情况是无法预先知道所需要的内存大小,或者申请内存太大,无法通过栈内存来自动分配,下面让我们再来看一段英文解释。A heap is a form of memory manager that an application can use when it needs to allocate and free memory dynamically. Common situations that call for the use of a heap are when the size of the 阅读全文
posted @ 2012-06-02 10:08 SolidMango 阅读(6566) 评论(0) 推荐(1) 编辑
摘要: 详解C++代码反汇编后的堆栈寄存器EBP和ESP最近在分析一个进程崩溃的严重问题,其中有些过程分析需要对ebp, esp 有清晰的理解,对于ebp 和esp 相信大家都很熟悉了,但是为了使本文自成体系,我还是解释一下。ebp--栈底指针esp--栈顶指针如图所示,简化后的代码调用过程如下:void Layer02(){ int b = 2;}void Layer01(){ int a = 1; Layer02();}那么函数执行过程中ebp和esp是如何变化的呢?如下是反汇编后的代码:void Layer02(){00413700push ebp00413701mov ebp,esp 0041 阅读全文
posted @ 2012-05-25 18:35 SolidMango 阅读(14898) 评论(7) 推荐(6) 编辑