博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2012年8月17日

摘要: 一般察看函数运行时堆栈的方法是使用GDB之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。在头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈Function: int backtrace(void **buffer,intsize)该函数用与获取当前线程的调用堆栈,获取的信息将会被存放在buffer中,它是一个指针列表。参数 size用来指定buffer中可以保存多少个void* 元素。函数返回值是实际获取的指针个数,最大不超过size大小,在buffer中的指针 阅读全文

posted @ 2012-08-17 14:38 开源云 阅读(9756) 评论(0) 推荐(0) 编辑

2012年7月10日

摘要: 以下安装所用的到资源请到http://download.csdn.net/detail/osyun/4421715下载。如果博客园给我开放大于30M的权限,我就将该包发到博客园上。我使用的安装环境是rhel5.5。如果是其它系统的就别下那个包了,可以参考如下的离线安装方式去自己做一个。本文也只是为大家提供一个convirt离线安装的方式。在rhel5.5下,只保留gcc的情况下,该文档完全有效。因为在安装python2.6.5的时候需要用的gcc编译。一、搭建本地的yum源1.新建/yum文件夹,将光盘中的Server文件夹下的包全部拷贝到yum下2.新建配置文件#vi /etc/yum.re 阅读全文

posted @ 2012-07-10 23:06 开源云 阅读(2085) 评论(0) 推荐(0) 编辑

2012年4月17日

摘要: ConVirt是一个虚拟化管理平台,使用无代理模式工作。当需要管理的目标节点提供SSH登录方式时,ConVirt通过SSH登陆到计算节点,在计算节点上直接运行相对应的虚拟化管 理命令。当需要管理的目标节点提供HTTP/HTTPS/XML-RPC远程调用接口时,ConVirt插件通过目标节点所提供的远... 阅读全文

posted @ 2012-04-17 14:07 开源云 阅读(3191) 评论(3) 推荐(0) 编辑

2012年2月9日

摘要: 定义:迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。场景:我们有两个聚合A和B,有一个聚合管理的类,包含聚合A和B,而这个管理类的功能就是依次遍历它所包含的聚合中的元素并打印到控制台上。每个聚合中的元素存放的方式是不同的,有的用的是数组,有的可能是vector或者list等,因此我么为每个聚合定义了一个迭代器,管理类只需要依次获取各聚合的迭代器,使用迭代器去遍历其中的元素,而不需要去理会聚合中元素的存放方式。类图:c++代码如下:#include <iostream>#include <vector>using namespace st 阅读全文

posted @ 2012-02-09 15:35 开源云 阅读(1347) 评论(0) 推荐(0) 编辑

摘要: 定义:模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。钩子的定义:钩子是一种被声明在抽象类中的方法,但只有空的或者默认的实现。钩子的存在,可以让子类有能力对算法的不同点进行挂钩。究竟需不需要挂钩,则由子类自行决定。场景:我们有一个咖啡厅,有一个专门的配方来调制咖啡喝茶,在调制的过程中的某些方法其实是比较类似的,步骤如下:1、把水煮沸2、用热水泡咖啡或茶3、把饮料倒进杯子4、在饮料内加入适当的调料,咖啡要加糖和牛奶,而茶需要加柠檬。在调料添加的时候,我们需要询问顾客是否需要添加调料,此时就会用到钩子。类 阅读全文

posted @ 2012-02-09 15:15 开源云 阅读(1448) 评论(0) 推荐(0) 编辑

2012年2月2日

摘要: 定义:外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。示例图:如上图,我们的Facade提供了几个简化的接口,将子系统的功能封装起来,这样我们就可以通过调用这几个简化的接口来实现我们想要的功能。但外观模式依然将系统的完成功能暴露出来,我们不仅可以操作简化的接口,也可以直接操作系统底层的高级方法。外观模式允许我们让客户和子系统之间避免紧耦合。因为我们客户代码是针对外观而不是针对子系统编写的。如果当初你的客户代码是针对外观而不是针对子系统编写的,现在你就不需要改变客户代码,只需要修改外观代码即可。此处就不具c++代码的例子啦。参考图书:《Hea 阅读全文

posted @ 2012-02-02 15:07 开源云 阅读(733) 评论(0) 推荐(0) 编辑

摘要: 定义:适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。场景:我们有一只鸭子和一只火鸡,鸭子会嘎嘎叫,而火鸡会咯咯叫,鸭子飞的要远一点,而火鸡只能飞行一小段距离。火鸡和鸭子都会叫,但是他们的叫声不同,接口也不同,飞行的接口相同但是飞行的行为不同。对象适配器:使用对象的组合,以修改的接口包装被适配者。该种做法的优点是被适配者的任何子类都可以搭配着适配器使用。我们分别实现鸭子和火鸡的适配器,鸭子适配器关联了一个鸭子对象,继承自火鸡对象,这样我们可以覆盖火鸡的接口以适应鸭子的行为。同样,火鸡适配器关联了一个火鸡对象,继承自鸭子对象,这样我们就可以覆盖鸭子的 阅读全文

posted @ 2012-02-02 14:18 开源云 阅读(1749) 评论(0) 推荐(0) 编辑

2012年2月1日

摘要: Lua与c++互调上一节我们实现了一个c++的封装类,通过该类我们就可以调用lua中的函数。可是这还满足不了我们的需求,我们还想通过lua来调用我们c++的方法。通过研究/tolua++-1.0.93/src/tests下的例子,结合c++的特性,我总结了一个tolua的例子。不能说相当完美,但是基本的功能已经能够满足项目的需求了,而且通过这个例子,也可以使各位对tolua的语法以及用法有一个初步的了解。本例只是一个简单的lua与c++互调的示例,如果想要更进一步的学习tolua,可以参考/tolua++-1.0.93/src/tests下的例子,那些例子都是相当的经典。另外鉴于tolua的强 阅读全文

posted @ 2012-02-01 10:45 开源云 阅读(8007) 评论(0) 推荐(2) 编辑

摘要: C++调用lua本节我将一步一步带领大家完成c++调用lua函数并接受lua的返回值,通过分析调用的方式来封装一个类,最终封装完成的类并不是最优的,但应该能够满足一般的项目中对lua调用的功能。不足之处欢迎大家给予指正。1 基本概念1.1 栈c++调用lua是通过一个抽象的栈来实现数据的交换的。C++调用lua时,首先需要把lua函数需要的参数压入这个抽象的栈中,如果c++想要从lua中获取数据,则lua需要先把数据压入栈中,然后c++从栈中取得需要的数据。Lua是以严格的LIFO规则来操作栈的,即后进先出原则,而c++则可以操作栈上的任何一个元素。2 常用函数void lua_pushnil 阅读全文

posted @ 2012-02-01 10:32 开源云 阅读(4750) 评论(1) 推荐(1) 编辑

2012年1月16日

摘要: Lua基础学习要学习tolua++的使用,首先也得先学会lua的基本语法和lua与c/c++之间的接口调用。本次总结意在把lua的一些基本的用法总结归纳一下,好让大家可以在短时间内对lua有一个简单的了解,达到可以看懂lua代码的目的。注:注释:单行注释:--多行注释:--[[ --]]lua大小写敏感1. 基本类型1.1 nil它就相当于c++里边的NULL,但又与NULL不同,lua中的全局变量变量如果没有赋初值,则它的值就默认等于nil,如果想要删除一个全局变量变量,则可以给它赋值nil。1.2 booleans它的取值跟c++一样,有true和false两种。但是在lua中有一个特别的 阅读全文

posted @ 2012-01-16 15:02 开源云 阅读(4980) 评论(0) 推荐(0) 编辑