随笔分类 -  原创文章

摘要:使用Windbg 调试分析代码 ---从.cmdtree命令的积累开始一提到windbg很多人心里就有些畏难情绪,也难怪,这东西虽然是神器,对一个新手来说使用起来确实有些不方便,而且命令太多,很难一下子都记住,最近发现一个好方法,分享出来,希望大家可以通过这个方法开个好头。使用windbg第一关就是要记住一堆的命令,其实老外也不会记住所有的命令,哪怕是高手,也就那常用的几十个,最多不超过几百个命令。Windbg里面有一个功能,说是功能不如说是原命令.cmdtree,使用这个命令,我们可以将常用的命令记录起来,然后以图形界面的方式选择执行,这样地新手... 阅读全文
posted @ 2012-12-17 18:43 SolidMango 阅读(2698) 评论(5) 推荐(2) 编辑
摘要:Windows程序员进阶应该看的那些书 业内有一个普遍的现象,一般Windows程序员在写了3-5年的代码的时候会有一段迷茫期,因为这个时期的程序员已经掌握了常用的一些编程技巧,对某种编程语言已经比较熟悉,可以完成常规的任务,但是这个时候的程序员也很容易迷茫。主要的表现有以下几种: 第一种,开始不停 阅读全文
posted @ 2012-11-08 20:53 SolidMango 阅读(6406) 评论(18) 推荐(4) 编辑
摘要:程序员请不要忽视调试技术 想写这篇文章已经很久了,但是一直不知道如何开始,因为调试技术这个东西本身不像编程语言,C++/C#这种简单的东西,大家想做些什么,查查类库,查查msdn,写出一些功能,皆大欢喜。 调试技术本身就很枯燥,如果没有一定定力的兄弟,看看可能就觉得犯困,没劲,没成就感。但是想想程序 阅读全文
posted @ 2012-11-07 22:01 SolidMango 阅读(3033) 评论(18) 推荐(5) 编辑
摘要:Windows开发的内功和招式 最近一个月笔者休了大约两周的假期,期间没有学习新的开发技术,也没有去游山玩水,而是对自己的知识结构和Windows开发本身进行了一个深入的思考,收获颇多,在这里希望和大家共同分享一下。 如果把Windows开发比作练武,那么就一定有内功和招式,二者相依相存,没有内功的招式只能算是花架子,中看不中用。 那么,什么算是内功呢? 首先,我想说的是系统模型和知识,整天在windows上做开发,对windows的了解够么?可能很多人说,我是做.net开发的,了解那么多没用,.net都做好了。我同意,人各有志嘛,但是我想问个问题,.net写的大型客户端有时候会突然卡... 阅读全文
posted @ 2012-09-22 08:08 SolidMango 阅读(5334) 评论(85) 推荐(19) 编辑
摘要:上次写了一篇文章,Windows代码heap内存分析实战 由于时间的关系,写的不是很详细,于是有朋友建议写的详细些,于是有了本文。Windows C++代码heap分析详解Windows代码占用的内存主要是堆和栈,其中栈内存又被称为自动内存,一般为系统自动管理,所以常见的问题主要发生在堆内存上。系统中如果分配了堆内存而不释放,或者错误释放,都会产生问题。首先来分析一下堆内存的主要结构:对于普通的堆:1. CreateHeap -> creates a _HEAP2. AllocHeap -> creates a _HEAP_ENTRY对于页堆 (gflags.exe /i +hpa 阅读全文
posted @ 2012-09-21 14:28 SolidMango 阅读(3062) 评论(2) 推荐(1) 编辑
摘要:使用Windows API PostThreadMessage进行线程间消息通信相信好多人都听过这个Windows API:PostThreadMessage,今天终于有时间来详细的研究一下,据我所知好多的公司在面试的时候都会提到这个API,因为常写代码的人一定会知道这个API,通过这个提问,可以考察一个人对细节的掌握程度。不多说了,开始正题。如下函数原型From MSDN:BOOL WINAPI PostThreadMessage(_In_DWORD idThread,_In_UINT Msg,_In_WPARAM wParam,_In_LPARAM lParam);idThread - [ 阅读全文
posted @ 2012-08-24 15:13 SolidMango 阅读(11141) 评论(6) 推荐(0) 编辑
摘要:C++学习的方法以及四大名著(荐)转眼间学习和使用C++已经有近10个年头了,开始学习的时候走了不少的弯路,今天有些时间,希望写下这篇文章并且对开始学习C++的朋友有些帮助。当然我首先需要说明的是,这篇文章是根据本人的感受写的,可能不同的人有不同的观点,欢迎讨论。开始学习C++的时候中国的互联网环境还不是很好,信息也比较闭塞,所以自己开始的时候是由Thinking in C++ 开始的,买了两卷本的英文版,废了好大的一番周折才算看完了,这个过程大约花费了近6个月的时间,当然期间也要花时间完成学业。后来就有这个根基开始了不断的写代码,做ACM的题,渐渐开始了C++真正的旅程。时至今天我发现,其实 阅读全文
posted @ 2012-08-17 11:17 SolidMango 阅读(12849) 评论(59) 推荐(18) 编辑
摘要:Bcdedit 用法详解昨天写了一篇文章< Windows Server 2008 R2 如何启动kernel dbg进行双机内核调试『配置详解』>其中提及到Bcdedit,但是并没有对其进行详细的解释,作为续篇,本文对其用法发进行讨论。Bcdedit用于对vista及其以后版本的windows进行启动配置,当然内核调试的启动也是基于这个工具的。好吧,言归正传,开始对配置进行讨论。首先如果想对启动项进行配置必须得先加入一个boot entry, adding Boot Entry 过程如下,我们可以选择从当前的启动项拷贝一份,然后做些必要的改动,具体命令如下:bcdedit /co 阅读全文
posted @ 2012-07-25 16:04 SolidMango 阅读(1842) 评论(2) 推荐(1) 编辑
摘要:相信windbg大家都不陌生,其提供了一个异常强大的功能就是kernel dbg, 在不同版本的windows 系统中启动kernel dbg的方式不禁相同,为了方便大家使用kernel dbg,本文对Windows Server 2008 R2系统上如何对其进行配置进行了讨论。Kernel dbg 对于系统程序员尤为重要,特别是驱动开发,经常需要和kernel dbg打交道,另外好多涉及到系统的用户态问题也需要内核调试,其重要性不言而喻,希望本文给您的内核之旅开个好头。对于Windows XP 启动内核调试相对简单,只要在boot.ini中加上相应的启动项就可以启动kernel dbg 故在 阅读全文
posted @ 2012-07-24 16:52 SolidMango 阅读(2159) 评论(2) 推荐(0) 编辑
摘要:重读<算法导论>记得多年前学数据结构的时候作为教材的延伸读物我拜读了<算法导论>,当时有选择的读了大约2/3的东西,只学理论和算法实在枯燥,看书之余动手写了其中的一些算法,但是由于实在不知道这些知识有什么用处,剩余的1/3大部分是一些具体的理论推导和稍微复杂的算法。那么,为什么近期又重读这本算法著作呢?首先就是我遇到问题了,在前一阵的工作中频繁出现红黑树的分析问题,我不得不根据红黑树的排列去查找STL Map 中的内容,每次出现问题都要去内存中找出有用的状态。其次就是在研究V8的时候我觉得有必要系统的研究一下编译器实现,于是研究了一段时间的<龙书>,那段时间 阅读全文
posted @ 2012-07-12 16:34 SolidMango 阅读(2205) 评论(16) 推荐(0) 编辑
摘要:应用C++ STL以最小堆方法解决Top K 问题问题的来源我想不必多言了,很多的面试题中,以及<编程之美>中都有对问题的描述,以及相关的解法,写本文的目的是以C++ STL的方式用最小堆解法解决这个问题。那么什么是最小堆呢?其实最小堆是一颗特殊二叉树,其父节点的key小于其孩子节点,对!最小堆不是堆,是二叉树!最小堆解法其实可以将问题的时间复杂度缩减到nlgK, 但是本文由于没有在C++ STL 中找到合适的函数保持最小堆(如果用自己写代码可以做到lgk),所以必须每次重建最小堆(如果您有更好的建议,欢迎指点),因此,时间复杂度为nk, 另外本文假设k<<n.#inc 阅读全文
posted @ 2012-07-04 17:06 SolidMango 阅读(9802) 评论(10) 推荐(3) 编辑
摘要:快速排序算法C++实现[评注版] 经常看到有人在网上发快速排序的算法,通常情况下这些人是在准备找工作,或者看<算法导论>这本书,而在他们发布的代码通常是差不多的版本,估计也是网上copy一下,自己改改,跑过了就算了,但是通常这样玩根本没有太大作用,如果到一家公司,给你一台不能上网的笔记本,20分钟, 阅读全文
posted @ 2012-06-27 09:27 SolidMango 阅读(29302) 评论(7) 推荐(3) 编辑
摘要:扬长避短使用Windbg和Visual Studio高效调试调试你的代码 经常被问及这样的问题: 你为什么非要使用Windbg调试你的程序? 记得有一次面试的时候笔者也被问到这样的问题,我的回答是:不是我非要使用Windbg, 只是在不同的情况下使用不同的工具会更加方便而高效。 那么这两者到底有什么区别?在什么情况下用什么工具会更方便呢? 所谓尺有所短,寸有所长,那么笔者就总结一下在什么情况下用什么工具会更方便,可能不是100%的全面,但是应该可以说明一定的问题,希望给初学者以指引。 Case 1: 分析.dmp文件的时候,可以使用Windbg和Visual St... 阅读全文
posted @ 2012-06-24 08:34 SolidMango 阅读(6669) 评论(7) 推荐(3) 编辑
摘要:浮躁的程序员经常看到一些程序员整天忙的不亦乐乎,甚至奋斗到天黑,苦战到半夜..包括我自己,也时而不时的加班,那么造成这些的原因是什么呢?别告诉我你的工作太多,老板压榨你!同在一个公司,为什么有些人就可以很快的完成人家的工作?是人家的工作比你少么?不见得吧?那到底是什么原因让好多人这么痛苦呢?我们从技术,做人,团队,理想和阶段几个方面对各种人的忙加以分析。良性的忙:作为一个程序员尤其是一个对好多东西还不熟悉的程序员,包括技术,业务,行业知识,而此时我们有时很有理想的时候,我们会感觉很忙,因为这是起步阶段,忙些是应该的,万事开头难,这个时候的坚实的基础是未来轻松高效做事的基础,所以这个时候我们很忙 阅读全文
posted @ 2012-06-22 17:42 SolidMango 阅读(4182) 评论(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 阅读(2988) 评论(2) 推荐(0) 编辑
摘要:首先解释一下,什么是堆内存? 堆是一种常见的内存管理器,应用程序通过堆来动态地分配和释放内存,通常使用堆的情况是无法预先知道所需要的内存大小,或者申请内存太大,无法通过栈内存来自动分配,下面让我们再来看一段英文解释。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 阅读(6587) 评论(0) 推荐(1) 编辑
摘要:1. 首先到Visual Studio的安装目录找到下面的一些文件,并将其拷贝到调试目标机器上。C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger\x862. 在目标机器上运行msvsmon.exe, 界面如下图,3. 在Tools->Options,进行上图所示的设置,选择ok.4. 在调试主机里打开source code, 填写调试目标机器的IP地址并attach到相应的进程,在调试主机上面设置对应的symbol server,设置断点,everything ok, 你可以远程调试啦,就是这 阅读全文
posted @ 2012-05-22 17:25 SolidMango 阅读(581) 评论(0) 推荐(1) 编辑
摘要:最近一直忙于项目,好久没写文章了,今天终于有些时间,把一些沉淀和思考总结一下,希望对大家有所帮助,也是对知识的一次梳理。转眼做windows开发已经又有5年的时间了,5年时间一直徘徊在几个大系统之间,原型设计,组件设计,重构,features实现,调试,修改bug,写过C++,用过COM,ATL,写过.Net,做过互操作,写过services用过WCF,可以说十八般武艺至少都尝试过,不敢说精通,但是至少对大部分的问题有自己的理解。首先我把目标锁定在Windows平台,因为我的工作要求我在这个平台下去做,实战经验也都是在这个平台上面积累起来的。对于Linux和Java我也会关注一些相关的东西,也 阅读全文
posted @ 2012-05-16 18:19 SolidMango 阅读(5346) 评论(25) 推荐(3) 编辑
摘要:调试九法:软硬件错误的排查之道<书评> 前几天从Top 100 Best Software Engineering Books, Ever听说这本书,唯一一本关于调试的,想必上榜只有它的道理,于是在卓越订了一本,昨天拿到的书,书很薄,但是看了以后觉得有共鸣,很震撼,相比某些人写的动辄上千页的调试书籍强多了。请允许我的直接,做技术,写书这种事情,讲的就是一个踏实,你不用心,写的东西假大空,写了还不如不写,你不写没人骂你,你一旦粗制滥造,骂你的人一定不少。 首先这不是一本讲具体技术的书籍,他的层次要高些,他已经将软件调试技术上升到了战术层面。说到战术,这本书里面讲的都是非常实际的技巧, 阅读全文
posted @ 2012-05-09 22:00 SolidMango 阅读(2234) 评论(5) 推荐(4) 编辑
摘要:最近在做信号处理和模式识别的相关技术的研究,有感于介绍这方面的入门文章太少,希望记录些有用的知识帮助需要从事相关工作的朋友少走些弯路。 Matlab大家应该都不陌生,园子里面应该有相当一部分人是学电信或自动控制出身的,我们从事着不同的行业,我们每天写着不同的软件。如果你在做信号处理或者通信相关的行业,相信如果有一天你需要做些原型设计,本文可以引导你快速的开始。 首先让我们来看看matlab的产品定位: The Language of Technical Computing MATLAB® is a high-level language and interactive environ 阅读全文
posted @ 2012-05-06 19:14 SolidMango 阅读(1901) 评论(6) 推荐(1) 编辑