- 博客(210)
- 资源 (44)
- 收藏
- 关注
原创 玩转windbg软件调试视频教程发布-windbg入门教程
【课程介绍】 工作过可能经常遇到以下场景 程序崩溃、内存泄漏、线程死锁,测试过程中你的缺陷总比别人多,虽然也做了自测,但仍然会出现一些很严重的缺陷, 问题原因始终无法定位。现场出现dump。。。眼看截止日期临近,问题还没有得到解决,领导在催,客户在吼。。。 遇到这些问题的时候是否会手足无措、焦头烂额?今天技术“大牛”带你从0开始玩转windbg软件调试。跟着视频轻轻松带你学会软件调试,从此调试问题
2017-09-29 19:21:28 3803 9
原创 敏捷软件开发scrum介绍
敏捷软件开发最近几年越来越火。跟传统软件开发相比有什么优点呢。今天我们就来聊一聊。首先我们来看下什么叫做敏捷。敏捷软件开发过程软件开发过程是指设计软件开发过程中涉及的一系列活动,指导开发组一步一步的进行软件开发。包括传统的瀑布过程、螺旋过程、原型过程、敏捷过程等。敏捷则是一类过程的统称。之所以把他们都称之为敏捷,是因为它们有共同的特点。敏捷过程讲究快速迭代快速试错,将一个大...
2018-08-31 20:30:54 4087 3
原创 软件架构和架构风格
今天给大家分享一下架构方面的东西。都是一些相对基础的东西,有错误的话请指正。首先我们来介绍一下什么是架构。架构一词来源于建筑,代表系统高层次的一些设计角色。比如建筑领域的一栋大楼的架构,指的就是大楼有多高、每一层有多高、有多少层、每一层包括多少房间、有几部电梯、消防通道在哪里、哪里是卫生间、哪里走线路、给排水管道在哪里等等。都是一些高层次的决策。这些高层次的决策从更高的层面为我们描述了这个系统...
2018-08-31 20:08:07 28278
原创 关于软件架构的一个比较好的比喻
关于软件架构的一个比较好的比喻:要修建一座大教堂,甲方有这样的一些特殊要求。比如大堂要能容纳5000人,中间不能有柱子,祷告时不能出现回响,透光度好白天可以无需照明等等。经架构师的设计论证后给出了下面的方案:教堂的主体框架结构是这样的,相互之间的承重关系结构是这样的,配套支撑的地基必须这样打;这里的柱子/承重墙/横梁是关键,另外这几处的配重平衡结构必须保持;教堂期望用100年,所以在这的几部分区域
2017-11-23 16:30:07 2375
原创 windbg入门教程--视频教程发布
最近发布了windbg的入门视频教程,有兴趣的同学可以去学习下。 地址:http://edu.csdn.net/course/play/6147 为了方便大家交流,创建了windbg软件调试交流群,交流调试技术、讨论调试难题。QQ群:128417096
2017-11-03 15:14:48 2673 2
转载 云计算的三种服务模式:IaaS,PaaS和SaaS
原文链接:http://www.cnblogs.com/beanmoon/archive/2012/12/10/2811547.html云计算的三种服务模式:IaaS,PaaS和SaaS 云服务”现在已经快成了一个家喻户晓的词了。如果你不知道PaaS, IaaS 和SaaS的区别,那么也没啥,因为很多人确实不知道。 “云”其实是互联网的一个隐喻,“云计算”其实就是使用互联网来接入存储或者运行在远
2017-07-04 11:46:03 5420
原创 模板方法模式在协议构造与解析中的应用
模板方法模式在协议构造与解析中的应用 实际开发中经常会遇到构造、解析各种二进制、Xml、json协议等。很容易想到的方案就是每个协议提供一个构造、解析的方法。这种方案好处是简单,任何人都召之即来。缺点也很明显,每个协议单独构造。如果需要修改这些协议里共有的每个字段,比如加个errInfo,则需要修改所有的地方。这种方案使用的是最简单的面向过程的思想。要知道我们在开发的是面向对象的代码。为何不能充分
2017-03-17 19:07:12 2445
原创 一篇本人在公司做面向对象技术分享时的文章
一篇本人在公司做技术分享时的文章! 上次插件进程化分享时,感觉大家对面向对象思想的理解还停留在很基础的层次。面向对象思想确实很难理解,因此学习面向对象思想并非一日之功。我看过很多面向对象的书,包括OOA、OOD、设计模式、UML、架构设计等,因此对于面向对象思想有了一些自己的浅显的理解,希望能对大家理解面向对象有所帮助。由于仅仅处于入门阶段,很多东西理解并不是那么透彻,可能存在很多错误或理解不够准
2016-10-31 16:37:43 4213 1
原创 对面向过程与面向对象的一点感悟
面向过程与面向对象的本质区别 一位计算机界的大师曾说过,“我认为,面向对象的目标从来都不是复用和扩展,而是提供一种处理复杂问题的方法”。 面向过程讲究自顶向下逐步求精。找到一个系统的入口然后顺藤摸瓜,分析出每一步以及影响这一步的其他因素,我们就能够定义这个系统。 面向对象认为世界是有很多对象组成的,各个对象之间时相互独立的,平时并没有什么关系。在某些外力的作用之下对象之间相互协作,表现出一定的行为
2016-07-19 09:56:25 8314 1
原创 从使用者观点去认识软件系统
对于一个还不存在的事物,我们不知道其结构,也就不能从结构性观点出发,同时也不知道他究竟具有什么功能。最好的做法就是从使用者的观点去描述他能够为使用者做什么。从使用者角度去描述软件,也非常符合我们对事物的认知过程。对于陌生的事物我们无法发现其本质,只能从表象揭示对使用者的作用。
2016-06-22 10:14:54 5156
原创 子系统划分的误区
对于习惯结构化程序设计的朋友来说,分析设计一个软件的起点是从子系统的划分开始的。而划分的依据一般都是以用户部门或业务进行划分。比如财务子系统、人力资源管理子系统等。但是上面的这些划分均是按用户业务划分的。计算机软件是为了解决现实问题而设计的,现实世界和计算机系统之间并不是相等的关系。因此这种按用户业务划分的方法,对计算机系统来说并没有什么意义。不仅无法有效指导设计和开发,还容易导致系统依赖关系的混乱。
2016-06-22 10:00:21 8860 1
原创 boost单独提取regex及自动链接介绍
项目中需要用到正则表达式校验复杂字符串有效性。于是想到了使用boost中的regex。 后来在具体实施时发现boost文件过于庞大,不能仅仅因为要使用regex就需要要将所有文件包含进来,更何况还要上传svn(此处有争议,后面介绍)。 尝试手动提取regex依赖文件,发现工作量太大于是放弃。由于使用vs2008开发环境且安装了sp1补丁,想到了tr1(C++ technical report 1
2015-12-11 09:18:23 5038
原创 给程序员新人的一封信
以下是给一名大一学生的回信,贴在这里希望能对后来的新人有所帮助。XXXX,你好: 请原谅拖了很久才给你回邮件。首先是因为前段工作很忙,晚上也要加班到很晚。再者感觉诚惶诚恐,害怕我的某些个人偏见会误导你。 从你的邮件中我可以感觉到你是一个有目标且有很强执行力的人。很多人进入大学之后就像无头的苍蝇,没有目标。相比较你的目标很清晰。坚持下去并不懈努力,相信你会实现自己的目标。夯实基础
2015-06-12 16:27:04 4312 8
原创 重构技巧
重构 重构指在不改变程序原有行为的基础上,对既有代码进行修改,以改进其内部结构。何时应该重构 添加功能时重构,修复bug时重构,代码评审时重构;何时不应重构 既有代码太过混乱或不能正常运作,项目已近最后期限。重构的好处 1. 重构可以改进软件设计 项目结束后,后期的bug修复、需求增加会导致代码逐渐腐败变质。冗余、结构混乱、难以理解、难以维护,难以扩展。如要修改某个错误,可能涉及到要修改的
2015-05-27 14:13:02 2893 1
原创 什么是重构
重构指在不改变程序原有行为的基础上,对代码进行修改,以改进其内部结构。是在代码写好之后,改进它的设计。 对于小的程序,快速而随性的构建一个简单程序,没什么大不了的。但如果我们构建的代码是复杂系统的一部分,那么就需要评估下代码的好坏了。程序还是可以正常工作,编译器不管代码是美是丑。但是当我们要修改系统,修复bug或扩展功能的时候,问题就出现了。这需要人的参与,人是在乎这个的。丑陋的代码是
2015-01-15 19:50:48 5361
原创 LIVE555研究之五:RTPServer(二)
LIVE555研究之五:RTPServer(二) 接上文,main函数的几行代码创建了RTSPServer类的子类DynamicRTSPServer对象。RTPServer类是服务器类的基类,DynamicRTSPServer代表具体的服务器子类。我们今天介绍的服务器程序就是基于该类实现的。 在创建DynamicRTSPServer时传入了值为554的端口号。这是因为RTSP默认
2014-08-28 20:17:40 9860 2
原创 LIVE555源码研究之四:MediaServer (一)
LIVE555源码研究之四:MediaServer (一) 从本篇文章开始我们将从简单服务器程序作为突破点,深入研究LIVE555源码。 从前面的文章我们知道,任何一个基于LIVE555库实现的程序都需要实现自己的环境类和调度类。这里,服务器程序就使用了BasicEnvironment库中实现的简单环境类和简单调度类。说它简单,是因为该环境类仅仅实现了将错误信息输出到控制台。而调
2014-08-19 19:24:15 9497 2
原创 LIVE555研究之三:LIVE555基础
LIVE555基础 LIVE555是为流媒体提供解决方案的跨平台C++开源项目。从今天起我们将正式开始深入LIVE555代码。 一、各库简要介绍 LIVE555下包含LiveMedia、UsageEnvironment、BasicUsageEnvironment、GroupSock库,MediaServer简单服务器程序以及其他多个测试demo。 LiveMedia库:包
2014-08-16 14:54:22 13037 6
原创 LIVE555研究之二: RTSP、RTP/RTCP协议介绍
LIVE555研究之二RTSP、RTP/RTCP协议介绍 一、RTSP协议概述 RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似。RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。RTSP本身并不用于传送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完
2014-08-02 11:20:10 20942 4
原创 Live555研究之一 源代码编译
Live555学习之一 源码编译 Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H.263+、DV、JPEG视频和多种音频编码。同时由于良好的设计,Live555非常容易扩展对其他格式的支持。目前,L
2014-07-20 09:49:15 13139 9
转载 windbg常用命令
基本知识和常用命令(1) Windbg下载地址http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx安装完后执行windbg –I将Windbg设置成默认调试器 (2) Windbg的命令分为标准命令,原命令和扩展命令,输入问号(?)可以显示所有的标准命令的帮助信息; 元命令以一个点(.)开始,输入.he
2014-03-03 22:29:56 10911
原创 你所不知道的C和C++运行库
你所不知道的C和C++运行库 周五晚,小雨,少见的未加班。无聊,遂准备写一篇博客,介绍一下C和C++运行库,只因发现工作几年的人对此一知半解的大有人在。 在使用VC构建项目时,经常会遇到下面的链接错误: 初学者面对这些错误常常不知所错:libcmt.lib是什么东西?msvcrtd.dll又是干吗用的?在使用VC++时我们也常常对下面的运行库配置项
2014-02-28 22:17:10 23095 11
原创 由使用LeakDialog时遇到的问题而引出的一些分析
由使用LeakDialog时遇到的问题而引出的一些分析 前段时间在使用leakDialog检测调用malloc和new所分配的内存泄露时,发现其根本不起作用!这让我百思不得其解!周末有时间研究了一下终于弄清了原因所在。本着分享的精神,将其写成博文,希望对大家有用。 LeakDialog是用于内存泄露检测的常用工具。使用LeakDialog不需要添加任何代码,就可以捕获各种形
2014-02-11 20:12:56 4873
原创 跟我一起学windows初高级调试(1) --你为什么要学调试
本系列文章使用C/C++语言,vs自带调试器和windbg等其他相关调试工具,介绍windows下用户态下的初高级调试,不涉及内核调试
2014-02-09 10:57:18 7117 3
转载 如果一个程序跑10000次只失败一次,你会怎么调试?
在前面调试Bug的神兵利器:通过WinDbg条件断点收集Log这篇文章中,我讲到了如何通过条件断点收集各种信息来判断Bug究竟出在哪里。但是,这个方法还是不太管用,因为它不能够反复执行某个程序。下面我要讲一种技巧可以用来调试类似这样的问题,这种技巧主要适用于下面几种情况:在程序出错的时候,某些信息、状态已经丢失,无法通过当前出错时候的状态推断出之前的状态。说的稍微具体一点就是,比如某个变量变成了N
2013-10-27 15:09:39 3916
转载 通过WinDbg条件断点收集Log
前段时间花了几天一直在用WinDbg调试一个比较棘手的Bug。这个Bug是C# Team那边发现的,他们的Testcase跑大概10分钟左右会出一个在CLR内部的ASSERT。比较难调试的主要原因在于ASSERT表明一个全局的数据结构出现了问题,本来不应该用完的数组却已经用完了(因为按照设计,这个数组是边使用边清理的,是不会用完的)。初步想到的有下面几种方案来调试:1. 设置数据断点2. 一步一步
2013-10-27 15:08:41 4000
转载 VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
BackgroundMSDN中对于在不同的配置下Link的LIB作了说明:C Runtime Library:开关对应的库版本/MDMSVCRT.LIB多线程DLL的Release版本/MDdMSVCRTD.LIB多线程DLL的Debug版本/MTLIBCMT.LIB多线程静态链接的Release版本/MTdLIBCMTD.LIB多线程静态链接的Debug版本/clrMSVCMRT.LIB托管代码
2013-10-27 15:05:59 3602
转载 Windbg 32位版本和64位版本的选择
习惯了Vsiual Studio的兄弟们可能会因为先入为主的原因以为所有的调试器都应该像它那样,其实不然,当你安装Debugging Tools for Windows的时候,你将发现有两个系列的工具,一系列32位的工具和一系列64位的工具。这让人觉得和费解,因为在我们安装Microsoft Visual Studio的时候你根本不需要考虑32位还是64位。如果你正使用windbg调试工具集(Wi
2013-10-26 19:07:02 11070
原创 windows程序员进阶系列:《软件调试》之Win32堆的调试支持
Win32堆的调试支持 为了帮助程序员及时发现堆中的问题,堆管理器提供了以下功能来辅助调试。 1:堆尾检查(Heap Tail Check) HTC,在堆尾添加额外的标记信息,用于检测堆块是否溢出。2:释放检查(Heap Free Check)在释放堆块时进行检查,防止释放同一个堆块。3:参数检查,对传递给堆的各种参数进行更多的检查。4:调用时验证(Heap Validate On Call)H
2013-10-16 19:46:51 8120 1
原创 windows程序员进阶系列:《软件调试》之Win32堆
Win32堆管理器Windows在创建一个新的进程时会为该进程创建一个第一个堆,被称为进程的默认堆。默认堆的句柄会被保存在进程环境块_PEB的ProcessHeap字段中。要获得_PEB的地址,可以通过$peb伪寄存器来获得。也可以通过.process获得。 如上图ProcessHeap字段即为进程默认堆。其上的HeapSegmentReserve是进程堆的预订(默认为1MB)大小。HeapSeg
2013-10-14 18:37:19 6381 3
原创 windows程序员进阶系列:《软件调试》之堆 的基本概念和分类
windows程序员进阶系列:《软件调试》之堆 (一) 堆是软件在运行时动态申请内存空间的主要途径。从堆上申请来的空间需要程序员自己申请和释放,且申请和释放操作必须绝对匹配。忘记释放或者多次释放可能会导致严重问题。与栈类似,使用堆的过程中也会由于向堆中写入超过所申请堆大小的数据,覆盖堆上的其他内容,而导致堆溢出问题。由于堆的特殊性,一旦堆被破坏将会导致一些严重的问题。由于如果对堆不够了解的话对于
2013-10-12 16:35:55 3785 3
转载 音视频同步-时间戳
音视频同步-时间戳 媒体内容在播放时,最令人头痛的就是音视频不同步。从技术上来说,解决音视频同步问题的最佳方案就是时间戳:首先选择一个参考时钟(要求参考时钟上的时间是线性递增的);生成数据流时依据参考时钟上的时间给每个数据块都打上时间戳(一般包括开始时间和结束时间);在播放时,读取数据块上的时间戳,同时参考当前参考时钟上的时间来安排播放(如果数据块的开始时间大于当前参考时钟上的时间,则
2013-10-06 20:10:01 2570 1
转载 yuv格式
YUV是指亮度参量和色度参量分开表示的像素格式,而这样分开的好处就是不但可以避免相互干扰,还可以降低色度的采样率而不会对图像质量影响太大。YUV是一个比较笼统地说法,针对它的具体排列方式,可以分为很多种具体的格式。转载一篇对yuv格式解释的比较清楚地文章,也可以直接参考微软的那篇文章。对于YUV格式,比较原始的讲解是MPEG-2 VIDEO部分的解释,当然后来微软有一个比较经典的解释,中文的大多是
2013-08-05 21:34:09 2298
转载 RAII惯用法:C++资源管理的利器
RAII惯用法:C++资源管理的利器RAII是指C++语言中的一个惯用法(idiom),它是“Resource Acquisition Is Initialization”的首字母缩写。中文可将其翻译为“资源获取就是初始化”。虽然从某种程度上说这个名称并没有体现出该惯性法的本质精神,但是作为标准C++资源管理的关键技术,RAII早已在C++社群中深入人心。我记得第一次学到RAII惯用法是在Bjar
2013-06-06 14:48:35 4173
原创 使用C++实现简单线程池v1.0
C++实现线程池。 欢迎转载,转载请注明原出处:http://blog.csdn.net/ithzhang/article/details/9020283 代码地址:https://github.com/ithzhang/ThreadpoolLib.git本文介绍的线程池采用C++语言,在windows平台下实现。此版本为Version 1.0,以后还会推出功
2013-06-04 11:05:36 23327 20
原创 《谈谈windows核心编程系列》 结构化异常处理SEH之__finally终止处理
结构化异常处理SEH:__finally终止处理。 结构化异常处理(Structuredexception handling)简称SEH。是windows系统提供的异常处理机制。促使windows将SEH加入到windows系统的一个关键原因就是:它可以简化操作系统本身的开发工作,同时还让系统更加健壮。 我们当然也可以在我们的程序中添加SEH机制,这样我们的应用程序也可以变得更加健壮。使用SE
2013-04-11 21:36:58 4967 4
转载 跟我一起写 Makefile
概述 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写mak
2013-04-08 16:18:28 2242
原创 windows程序员进阶系列:《软件调试》之七--运行期检查
运行库和运行期检查 上一篇文章我们介绍了编译期检查,编译期检查主要是检查程序的静态特征。对于程序运行期才体现出的错误,必须使用编译器提供的运行期检查功能。为了支持运行期检查,编译器提供了运行库。在运行库中提供了一些机制。 C/C++运行库 为了增强编程语言的能力,加快软件开发的速度,几乎所有的编程语言都定义了相配套的函数库或类库。比如C标准定义了标准C函数,C++标准定义了C++标准类库。这些库通
2013-04-07 19:27:59 6920
原创 windows程序员进阶系列:《软件调试》之六--编译器的调试支持
编译器的调试支持 编译器用于将高级语言翻译成cpu可以识别的机器代码。经历了几十年的发展,编译器发生了很大的变化,但是支持调试这一点没有任何改变。检查并报告被编译软件中的错误是编译器设计的一个主要目标。编译器在编译源代码和链接目标代码时,会做很多的检查工作。这包括编译期检查和运行期检查。 编译期检查:编译器在编译过程中,会检查代码中的语法错误,与此同时还会检查可能存在的逻辑错误和设计缺陷,并以编译
2013-03-25 20:34:44 2938
虚函数的原理,虚函数实现方式
2011-08-23
live555类关系结构图
2014-07-25
E:\233\ebook
2014-07-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人