2013年11月1日

Visual Leak Detector原理剖析

摘要: 认识VLDVLD(Visual Leak Detector)是一款用于Visual C++的开源内存泄漏检测工具,我们只需要在被检测内存泄漏的工程代码里#include “vld.h”就可以开启内存泄漏检测功能。当我们使用Visual Studio debugger来调试我们的进程时,VLD可以在程序退出时很直观地将泄漏的内存地址、堆栈、大小、内容输出到Visual Studio的Output窗口,此时我们只需要直接双击调用堆栈就可以跳转到对应的代码行,从而直接明了的知道哪里分配了的内存没有被释放,如下图:本文要剖析的VLD版本是V2.3,其源码可以在http://vld.codeplex.c 阅读全文

posted @ 2013-11-01 10:27 jeJee 阅读(1548) 评论(0) 推荐(0) 编辑

2013年3月8日

查找进程加载到内存中的EntryPoint

摘要: 工作中遇到了这样的问题:创建了一个子进程并将其挂起后,想获取该子进程的EntryPoint,已知通过GetModuleInformation(HANDLE hProcess, HMODULE hModule)(HModule就是模块的基地址)可以获取到Module的EntryPoint,但尝试通过CreateToolhelp32Snapshot 或者 EnumProcessModules 来遍历进程的module,进而获取HMODULE时总会失败,GetLastError返回299(仅完成部分的 ReadProcessMemory 或 WriteProcessMemory 请求),这与进程被挂 阅读全文

posted @ 2013-03-08 17:40 jeJee 阅读(1128) 评论(0) 推荐(0) 编辑

【笔记】进化型开发方法

摘要: 进化型开发方法:1.最初根本不知道终点在哪;2.不断尝试;3.开放心态。如何开始?1.创意;2.开会评估(95%都会被淘汰);3.过程中会因为阻障因素被淘汰。阻障因素:1.想太多了通常就不会去动手了;2.担心太多就可能不敢做了,要一个一个的去解决;3.不能光有计划(细节拆分,每次做一点);不能过度计划(尽快上手去做!);4.需要的工具和资源;先把能做的事做了,不管缺少的工具和资源!5.时间不够用(琐碎的事情太多,会议、邮件等等);把那些不重要的事情取消掉,如果这样做,以后可以花更少的时间处理琐事,这样就更容易做成要做的事。总结:理想总是很美好,但很可能不存在(独角兽悖论),现实才重要!有了好的 阅读全文

posted @ 2013-03-08 16:56 jeJee 阅读(215) 评论(0) 推荐(0) 编辑

2012年12月5日

错误注入学习笔记

摘要: 错误注入的概念在我们做软件测试的时候,除了保证正常情况下功能的完整性,有时也要考虑到在某些极端情况下软件的鲁棒性。然而当我们想去构造某些极端情况来验证程序的鲁棒性时,经常会发现这些极端情况很难构造。在软件测试领域,错误注入技术是通过注入错误来覆盖那些正常情况下不太容易出现的情况,以期增加测试的覆盖率。此技术对于建立一个健壮的系统是十分重要的。而在我们的实际工作中,由于某些极端情况下的环境不太好构造(如磁盘损坏),使得测试的过程中很难进行极端环境下的软件测试,同时,也给重现和定位问题带来极大的麻烦。这里还想顺便提一下,即使测试覆盖率达到100%了,也不能说明软件就没有问题了。因为可能还有一些异常 阅读全文

posted @ 2012-12-05 20:42 jeJee 阅读(1466) 评论(0) 推荐(0) 编辑

2012年10月31日

【PHP】PHPUnit单元测试利器:PHP Mock的使用方法

摘要: 由于环境依赖关系,或者是特殊环境的构造要求,这就可能导致我们在测试环境下做验证是很困难的。当我们无法直接使用的真实被依赖模块时,我们可以用“测试替身”(TestDouble)来代替。这个测试替身不需要与真实的被依赖模块有相同的行为,它只需要提供和真实的被依赖模块有相同的API就行了。PHPUnit提供的getMock($className)方法可以自动生成一个对象,而这个对象就可以作为原来那个类的测试替身。这个测试替身可以用在任何需要它的地方。默认情况下,原类的所有方法都被一个虚拟的实现替代,这个实现仅仅是返回NULL(不会调用原类中的对应方法)。你可以使用will($this->ret 阅读全文

posted @ 2012-10-31 12:03 jeJee 阅读(10087) 评论(0) 推荐(0) 编辑

2012年10月23日

【Android】ADT离线安装的问题

摘要: 受制于国内网络环境的问题,有时候想在Eclipse里直接在线安装ADT是安装不了的(本人公司和家里的电脑就是一台可以安装,另外一台安装不了)。网上找了一下,发现可以使用离线安装,离线安装的方式和在线安装比较类似,只是要先在网上下载好ADT包。ADT包的下载地址一般为https://dl-ssl.google.com/android/ADT-xx.x.x.zip,其中xx.x.x为版本号(如:https://dl-ssl.google.com/android/ADT-20.0.3.zip),如果下载不下来的话还有另外一个方法找到这个包,就是在QQ旋风里搜索资源"ADT-xx.x.x.z 阅读全文

posted @ 2012-10-23 16:47 jeJee 阅读(478) 评论(0) 推荐(0) 编辑

2012年9月26日

【python】YY一下python里的 True 和 False

摘要: 习惯了C++等其他语言的人都会习惯性的认为,在python里,True和False应当也是关键字才对,但是接下来问题就来了:首先,既然是关键字,为什么这两个关键字不像其他关键字一样全部小写呢?其次,既然是关键字,为什么写python脚本的时候,在python3.0之前的版本里这两个单词并没有像其他关键字一样标为特殊颜色?再次,由此我们开始怀疑,这两个单词真的是关键字么?让我们来做个实验,假设有如下代码:True = Falseprint(True)在python2.6里执行输出如下结果:而在python3.1里执行输出如下结果:这时我们不禁要惊呼,怎么回事?!实际上原因是这样的:在python 阅读全文

posted @ 2012-09-26 11:32 jeJee 阅读(984) 评论(0) 推荐(0) 编辑

2012年9月22日

【Lua】为什么 Lua 里没有 continue

摘要: 对于Lua里没有continue的问题相信很多用lua的人都遇到过,官方也有作出了解释。在Lua中,repeat until 有点类似于C++的do while,但在机制上有一点区别,在Lua的until的条件表达式中,表达式中的变量可以是repeat until代码块内声明的局部变量,但在C++中,while的条件表达式中的变量不允许出现do while内部声明的临时变量,必须是do while外部声明的变量。基于这个原因,我们假设Lua支持了continue,考虑以下代码:local a = 1 -- outerrepeat if f() then continue ... 阅读全文

posted @ 2012-09-22 13:20 jeJee 阅读(32556) 评论(1) 推荐(1) 编辑

2012年9月20日

【C/C++】关于C++的名字查找与继承

摘要: 为了将问题简化,首先来看一段代码:#include <tchar.h>#include "stdio.h"class A{public: void func() { printf("A::func\n"); }};class B : public A{public: void func(int n) // 注意这里func与A的func同名,但参数不同 { printf("B::func\n"); }};int _tmain(int argc, _TCHAR* argv[]){ B b; b.func(); ... 阅读全文

posted @ 2012-09-20 11:56 jeJee 阅读(370) 评论(0) 推荐(0) 编辑

2012年9月19日

【C/C++】关于编译错误 "error C2146: syntax error : missing ';' before identifier 'xxx'"

摘要: 今天帮同学解决了一个问题,之前其实也遇到过,现在总结一下。问题大概是这样的,假设有如下代码:#include <tchar.h>DWORD g_count = 0;int _tmain(int argc, _TCHAR* argv[]){ return 0;}使用VS编译会报如下错误:1>f:\testproj\consoletest_vs2005\test\test.cpp(3) : error C2146: syntax error : missing ';' before identifier 'g_count'1>f:\testp 阅读全文

posted @ 2012-09-19 14:53 jeJee 阅读(13908) 评论(0) 推荐(0) 编辑

导航