1.release和debugrelease和debug的源码区别
2.gm游戏源码网
3.H5游戏架设经验分享
4.Debug版本和Release版本有什么区别?
5.啥是逆向工程
release和debugrelease和debug的区别
关于release和debug,release和debug的源码区别这个很多人还不知道,今天来为大家解答以上的源码问题,现在让我们一起来看看吧!源码
1、源码一、源码变色线型指标源码Debug 和 Release 编译方式的源码本质区别Debug 通常称为调试版本,它包含调试信息,源码并且不作任何优化,源码便于程序员调试程序。源码
2、源码Release 称为发布版本,源码它往往是源码进行了各种优化,使得程序在代码大小和运行速度上都是源码最优的,以便用户很好地使用。源码
3、Debug 和 Release 的真正秘密,在于一组编译选项。
4、下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误,在此不讨论)Debug 版本:/MDd /MLd 或 /MTd 使用 Debug runtime library(调试版本的运行时刻函数库)/Od 关闭优化开关/D "_DEBUG" 相当于 #define _DEBUG,打开编译调试代码开关(主要针对assert函数)/ZI 创建 Edit and continue(编辑继续)数据库,这样在调试过程中如果修改了源代码不需重新编译/GZ 可以帮助捕获内存错误/Gm 打开最小化重链接开关,减少链接时间Release 版本:/MD /ML 或 /MT 使用发布版本的运行时刻函数库/O1 或 /O2 优化开关,使程序最小或最快/D "NDEBUG" 关闭条件编译调试代码开关(即不编译assert函数)/GF 合并重复的字符串,并将字符串常量放到只读内存,防止被修改实际上,Debug 和 Release 并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项行动。
5、事实上,我们甚至可以修改这些选项,从而得到优化过的调试版本或是带跟踪语句的发布版本。
6、二、哪些情况下 Release 版会出错有了上面的介绍,我们再来逐个对照这些选项看看 Release 版错误是怎样产生的1. Runtime Library:2. 优化:这类错误主要有以下几种:(1) 帧指针(Frame Pointer)省略(简称 FPO ):在函数调用过程中,所有调用信息(返回地址、参数)以及自动变量都是放在栈中的。
7、若函数的声明与实现不同(参数、返回值、调用方式),就会产生错误————但 Debug 方式下,栈的访问通过 EBP 寄存器保存的地址实现,如果没有发生数组越界之类的错误(或是越界“不多”),函数通常能正常执行;Release 方式下,优化会省略 EBP 栈基址指针,这样通过一个全局指针访问栈就会造成返回地址错误是程序崩溃。
8、C++ 的强类型特性能检查出大多数这样的错误,但如果用了强制类型转换,就不行了。
9、你可以在 Release 版本中强制加入 /Oy- 编译选项来关掉帧指针省略,以确定是否此类错误。
、(2) volatile 型变量:volatile 告诉编译器该变量可能被程序之外的未知方式修改(如系统、其他进程和线程)。
、(3) 变量优化:优化程序会根据变量的使用情况优化变量。
、例如,函数中有一个未被使用的变量,在 Debug 版中它有可能掩盖一个数组越界,而在 Release 版中,这个变量很可能被优化调,此时数组越界会破坏栈中有用的数据。
、当然,实际的情况会比这复杂得多。
、与此有关的错误有:3. _DEBUG 与 NDEBUG :当定义了 _DEBUG 时,assert() 函数会被编译,而 NDEBUG 时不被编译。
、除此之外,VC++中还有一系列断言宏。
、这包括:ANSI C 断言 void assert(int expression );C Runtime Lib 断言 _ASSERT( booleanExpression );_ASSERTE( booleanExpression );MFC 断言 ASSERT( booleanExpression );VERIFY( booleanExpression );ASSERT_VALID( pObject );ASSERT_KINDOF( classname, pobject );ATL 断言 ATLASSERT( booleanExpression );此外,TRACE() 宏的编译也受 _DEBUG 控制。
、4. /GZ 选项:这个选项会做以下这些事(1) 初始化内存和变量。
、(2) 通过函数指针调用函数时,会通过检查栈指针验证函数调用的匹配性。
、hive sql 源码(防止原形不匹配)(3) 函数返回前检查栈指针,确认未被修改.三、怎样“调试” Release 版的程序1. 前面已经提过,Debug 和 Release 只是一组编译选项的差别,实际上并没有什么定义能区分二者。
、我们可以修改 Release 版的编译选项来缩小错误范围。
、如上所述,可以把 Release 的选项逐个改为与之相对的 Debug 选项,如 /MD 改为 /MDd、/O1 改为 /Od,或运行时间优化改为程序大小优化。
、注意,一次只改一个选项,看改哪个选项时错误消失,再对应该选项相关的错误,针对性地查找。
、这些选项在 ProjectSettings... 中都可以直接通过列表选取,通常不要手动修改。
、由于以上的分析已相当全面,这个方法是最有效的。
、2.你也可以像 Debug 一样调试你的 Release 版,只要加入调试符号。
、在 Project/Settings... 中,选中 Settings for "Win Release",选中 C/C++ 标签,Category 选General,Debug Info 选 Program Database。
、再在 Link 标签 Project options 最后加上 "/OPT:REF" (引号不要输)。
gm游戏源码网
GM游戏源码网是一家专注于提供游戏源码的网站,其涵盖了多种类型的游戏,包括休闲、益智、动作、冒险等多种类型。该网站的游戏源码都是经过精心筛选的优质源码,可以大大节省开发者的时间和成本。
GM游戏源码网的游戏资源非常丰富,覆盖了各种游戏类型,不论你是喜欢休闲小游戏,还是喜欢各种挑战的动作游戏,都可以在这里找到适合自己的游戏源码。此外,该网站还提供了专业的客服支持,能够解决您在使用源码过程中遇到的各种问题。
GM游戏源码网的游戏源码质量非常高,每个游戏源码都经过了严格的测试和筛选,确保质量和稳定性。同时,该网站还提供了完整的源码注释和使用说明,使得开发者可以轻松地使用和修改游戏源码。
GM游戏源码网还提供了多种不同的购买方式,包括单个游戏源码购买和会员购买两种方式。会员购买可以享受更多的优惠和特权,包括优先获取新的游戏源码和更优惠的价格。
总之,GM游戏源码网是一家提供高品质游戏源码的专业网站,为游戏开发者提供了方便快捷的游戏源码获取途径,帮助开发者更高效地进行游戏开发。如果您是一名游戏开发者,那么GM游戏源码网将成为您的不二之选。
H5游戏架设经验分享
首先,我不是专业做游戏的,只是在一些机缘巧合下,发现可以自己架设游戏做GM,后台免费发送游戏中的各种充值和道具,然后在游戏里为所欲为,各种榜一秒杀,简直不要太爽,于是便一发不可收拾开始了游戏架设的研究...
本文分享我对游戏架设的经验心得,如果你也喜欢架设游戏,那么这篇文章肯定会对你有所帮助。
我目前架设运行的游戏都汇总在文章:好玩的免费GM游戏整理汇总,所有游戏架设教程,包含已下架的都在我博客的游戏分类中,网上大多是视频教程,而像我这种耗时耗力写详细图文教程基本是没有的。
游戏架设对我来说就像打开了一个新世界,原来游戏还可以这么玩~
最开始我是在某宝上发现有后台的游戏,可以任意充值和发送道具,觉得很爽,虽然还当不了榜一,eth内核源码但是可以体验满级VIP和各种道具带来的快感,不过这种游戏基本不会运营太长时间就会关服。
后来我就想到是不是可以自己搭建个游戏,正好自己是做前端的,也很想研究下游戏界面是如何实现的,所以就开始研究,各种查找资料,直到自己搭建成功了第一款游戏《大天使之剑》,打开了新世界。
我搭建的游戏基本都是Linux环境的H5游戏,只搭建过一款客户端类型的《阿拉德之怒》,因为自己是做前端的,所以对H5比较熟悉,而且因为自己使用的苹果手机,App需要签名会比较麻烦,而H5只要有浏览器就可以。
至于为什么不用windows环境和一键端,则是因为我买的服务器配置都比较低,windows会占用过多内存,而一键端的集成特性会使得一台服务器基本只能搭建一个游戏,很不划算。
我的博客和公众号初衷是分享一些IT技术文章,后来也把游戏架设写了进去,发现浏览关注人数增加了不少- -,占到百分之7、,这让我哭笑不得,总觉得背离了初衷。
现在博客的点击量是W+,基本每天会有的访客和的点击量。
公众号目前关注人数6千,嗯,大部分都是因为游戏关注的- -。
然后还有个游戏群...主要是给大家游戏授权和交流用。
架设游戏首先需要一台服务器,市面上的云服务器很多,建议选大厂的,2核4G内存6M宽带配置一般游戏足矣,H5游戏比较吃宽带,因为需要加载的网络资源比较多。
个人推荐腾讯云的轻量应用服务器,性价比高,放心我不是打广告,我不配- -,新人、双十一或者新年活动比较合适,一年不到,有条件的可以多买几年,腾讯云轻量应用服务器还有个好处是可以免费创建两个快照,这点很实用。
网上的资源网站其实很多,我整理了几个我常用的资源网站,有收费的也有免费的。
以上网站有挂掉或者停止运营的风险,请谨慎购买。还有很多其他的资源网站,大部分都是搬砖的资源,很容易搜到。如果还找不到,可以看看以上这些资源网的友情链接。
大部分资源网站用的都是Zibll、CeoMax或者Ripro主题网站,自己也曾想过搞一个的念头,奈何时间精力有限,就放弃了。我架设过的游戏资源都会免费分享在公众号上,大家可以通过公众号echeverra回复游戏名获取。
架设游戏有时候是一件很玄妙的事情,《阿拉德之怒》我第一次架设还算顺利,现在已经连续运行了多天没有发生过异常重启,但是第二次换服务器架设却死活也不成功,我怀疑很大概率是由于服务器本身的问题。
架设就好比你看说明书组装家具一样,只要安装指定的环境,按照步骤一步步来基本都会成功的,我写的图文教程都很详细,很多人都架设成功并在群里分享。如果环境步骤都没问题多次尝试还是不成功,那很有可能是遇到我上文提到的服务器自身问题。
这里列举一些游戏群里大家架设大概率会遇到的问题:
游戏是可以使用域名的,最开始我使用域名有两个原因,第一域名比直接IP访问更直观且高大上,第二如果服务器到期了,虽然要更换服务器IP,但是访问游戏的域名是不变的。
但使用域名是有风险和限制的,域名备案需要填写网站类型,个人是没有运营游戏资质的,所以废了九牛二虎之力我又将域名形式改回了IP,情话答题源码如果你有类似想法就不要踩坑了- -。
经常有人会问我一个服务器上能不能同时搭建多个游戏,答案是肯定的,我基本上每个服务器都会搭建2-3个游戏,还有博客网站等,这也导致我的服务器基本没有空闲的时候,一直有网络请求。
想要一个服务器搭建多个游戏有几个比较苛刻的前提:
第一是几款游戏搭建环境一致或兼容,如CentOs的版本,数据库的类型和版本等,只有环境都符合搭建的几个游戏才能都成功运行起来,比较好的一点是一般游戏对环境要求都比较通用,大部分使用CentOs 7 和mysql 5 都可以。
第二内存足够,一般一个H5游戏会占用小2G左右的内存,所有4G内存的配置只能搭建两个游戏,需要注意的是使用内存超过%会有大概率端口异常挂掉的情况。这时候可以写个脚本监测端口,挂掉再重新启动即可。
第三是端口不能冲突,几款游戏如果占用了同一个端口,那么肯定会有冲突,之前我搭建《冰雪传奇》和《雷霆传奇》就发生过冲突的端口,后来将《冰雪传奇》的端口进行了修改才解决。
第四是数据库表名不能冲突,和端口冲突同理,只能修改数据库和源码中的表名解决,但这种情况并不常见,除非你搭建的几款游戏是换皮的。
具体能否搭建多个游戏还需要实际去操作,多多尝试~
拿到一款游戏源码我都会强迫症的全局搜索源码中的广告,然后去除掉,因为很影响玩游戏的心情。
考虑安全问题,源码中的数据库密码和GM码我也会更改,建议大家也改掉。
架设好之后我会试玩一段时间,有一些简单的BUG我会尝试修复下,如果比较严重修复不了,影响整体游戏体验的那就只能放弃了,这种坑我也踩了不少。
我分享的游戏基本不会有大问题,而且都是我优化过的,像《梦幻西游》我就花了很长的时间去修复完善,直到满意为止。
数据是无价的,所以数据要及时备份,不要等数据丢失了才后悔莫及,我会使用两种方式对数据进行备份处理。
第一种是使用服务器快照,腾讯云轻量服务器有两个免费的快照,定期创建快照备份好,一旦有异常可对快照进行回滚恢复数据。阿里云的快照会按照容量收费,价格也很便宜。
第二种是使用宝塔的计划任务,可以定时每天执行备份数据库和文件,发生异常可以导入备份的数据库,记得每隔一段时间把备份的数据下载到本地保存好,以防万一。
虽然这些游戏源码或者端在网上很多,但或多或少都有版权问题,如果是架设的私服游戏以营利为目的那肯定是违法的。所以我架设的游戏都是无法内充的,也不允许群里讨论内充问题。
具体的法律条文大家感兴趣可以查查,营利数额较大或者有其他严重情节的会被有期徒刑或者拘役,所以提醒大家一定一定不要有这种违法的念头。
研究架设游戏半年多的时间我认识很多游戏相关的朋友,有游戏资源网的站长,也有开发游戏的技术高手,还有一些热爱架设游戏的玩家。有几个对架设游戏特别感兴趣的玩家,架设遇到问题会研究很久,架设很多次直到成功。
其实我想说的是游戏架设大家玩玩就好,这个技术含量并没有那么高,不要把过多的时间和精力浪费在这上,真正有技术含量的是其中的源码实现,修复BUG和完善游戏功能。去把时间用在真正能提升自己的地方,不要本末倒置。
写本文的目的一个是想把自己对游戏架设的一些经验分享给大家,让大家少走一些弯路,还有一个原因算是对自己的半年多架设游戏的一个总结吧。自己购买了4台服务器,免费运行着6个游戏和数个小游戏,通过架设和玩游戏也收获了很多快乐,但也到此为止啦~
以后还是同心筹源码会继续维护运行这几款游戏,平时会给大家授权下GM,但应该不会在架设新游戏了,这里对我游戏群里的小伙伴说声抱歉- -,非常感谢大家的支持,我还是会把更多的时间精力放在工作和家庭上,毕竟架设游戏只是个爱好而已。
倒是有计划开发一款自己的博客主题,名字想好了叫star,每月的号是我和媳妇的纪念日,star小星星则是代表我们的小baby。希望博客主题开发好后大家多多支持捧场啦~
最后祝大家兔年快乐,新的一年都能有所收获~
好啦,以上就是我对H5游戏架设经验分享的所有内容,希望对你有所帮助,如有问题可通过我的博客或微信公众号echeverra联系我。
你学“废”了么?
(完)
文章首发于我的博客echeverra.cn/build-game,原创文章,转载请注明出处。
欢迎关注我的微信公众号echeverra,一起学习进步!不定时会有资源和福利相送哦!
Debug版本和Release版本有什么区别?
一、Debug 和 Release 编译方式的本质区别
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误,在此不讨论)
Debug 版本:
/MDd /MLd 或 /MTd 使用 Debug runtime library(调试版本的运行时刻函数库)
/Od 关闭优化开关
/D "_DEBUG" 相当于 #define _DEBUG,打开编译调试代码开关(主要针对
assert函数)
/ZI 创建 Edit and continue(编辑继续)数据库,这样在调试过
程中如果修改了源代码不需重新编译
/GZ 可以帮助捕获内存错误
/Gm 打开最小化重链接开关,减少链接时间
Release 版本:
/MD /ML 或 /MT 使用发布版本的运行时刻函数库
/O1 或 /O2 优化开关,使程序最小或最快
/D "NDEBUG" 关闭条件编译调试代码开关(即不编译assert函数)
/GF 合并重复的字符串,并将字符串常量放到只读内存,防止
被修改
实际上,Debug 和 Release 并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项行动。事实上,我们甚至可以修改这些选项,从而得到优化过的调试版本或是带跟踪语句的发布版本。
二、哪些情况下 Release 版会出错
有了上面的介绍,我们再来逐个对照这些选项看看 Release 版错误是怎样产生的
1. Runtime Library:链接哪种运行时刻函数库通常只对程序的性能产生影响。调试版本的 Runtime Library 包含了调试信息,并采用了一些保护机制以帮助发现错误,因此性能不如发布版本。编译器提供的 Runtime Library 通常很稳定,不会造成 Release 版错误;倒是由于 Debug 的 Runtime Library 加强了对错误的检测,如堆内存分配,有时会出现 Debug 有错但 Release 正常的现象。应当指出的是,如果 Debug 有错,即使 Release 正常,程序肯定是有 Bug 的,只不过可能是 Release 版的某次运行没有表现出来而已。
2. 优化:这是造成错误的主要原因,因为关闭优化时源程序基本上是直接翻译的,而打开优化后编译器会作出一系列假设。这类错误主要有以下几种:
(1) 帧指针(Frame Pointer)省略(简称 FPO ):在函数调用过程中,所有调用信息(返回地址、参数)以及自动变量都是放在栈中的。若函数的声明与实现不同(参数、返回值、调用方式),就会产生错误————但 Debug 方式下,栈的访问通过 EBP 寄存器保存的地址实现,如果没有发生数组越界之类的错误(或是越界“不多”),函数通常能正常执行;Release 方式下,优化会省略 EBP 栈基址指针,这样通过一个全局指针访问栈就会造成返回地址错误是程序崩溃。C++ 的强类型特性能检查出大多数这样的错误,但如果用了强制类型转换,就不行了。你可以在 Release 版本中强制加入 /Oy- 编译选项来关掉帧指针省略,以确定是否此类错误。此类错误通常有:
● MFC 消息响应函数书写错误。正确的应为
afx_msg LRESULT OnMessageOwn(WPARAM wparam, LPARAM lparam);
ON_MESSAGE 宏包含强制类型转换。防止这种错误的方法之一是重定义 ON_MESSAGE 宏,把下列代码加到 stdafx.h 中(在#include "afxwin.h"之后),函数原形错误时编译会报错
#undef ON_MESSAGE
#define ON_MESSAGE(message, memberFxn) { message, 0, 0, 0, AfxSig_lwl, (AFX_PMSG)(AFX_PMSGW)(static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) > (&memberFxn) },
(2) volatile 型变量:volatile 告诉编译器该变量可能被程序之外的未知方式修改(如系统、其他进程和线程)。优化程序为了使程序性能提高,常把一些变量放在寄存器中(类似于 register 关键字),而其他进程只能对该变量所在的内存进行修改,而寄存器中的值没变。如果你的程序是多线程的,或者你发现某个变量的值与预期的不符而你确信已正确的设置了,则很可能遇到这样的问题。这种错误有时会表现为程序在最快优化出错而最小优化正常。把你认为可疑的变量加上 volatile 试试。
(3) 变量优化:优化程序会根据变量的使用情况优化变量。例如,函数中有一个未被使用的变量,在 Debug 版中它有可能掩盖一个数组越界,而在 Release 版中,这个变量很可能被优化调,此时数组越界会破坏栈中有用的数据。当然,实际的情况会比这复杂得多。与此有关的错误有:
● 非法访问,包括数组越界、指针错误等。例如
void fn(void)
{
int i;
i = 1;
int a[4];
{
int j;
j = 1;
}
a[-1] = 1;//当然错误不会这么明显,例如下标是变量
a[4] = 1;
}
j 虽然在数组越界时已出了作用域,但其空间并未收回,因而 i 和 j 就会掩盖越界。而 Release 版由于 i、j 并未其很大作用可能会被优化掉,从而使栈被破坏。
3. _DEBUG 与 NDEBUG :当定义了 _DEBUG 时,assert() 函数会被编译,而 NDEBUG 时不被编译。除此之外,VC++中还有一系列断言宏。这包括:
ANSI C 断言 void assert(int expression );
C Runtime Lib 断言 _ASSERT( booleanExpression );
_ASSERTE( booleanExpression );
MFC 断言 ASSERT( booleanExpression );
VERIFY( booleanExpression );
ASSERT_VALID( pObject );
ASSERT_KINDOF( classname, pobject );
ATL 断言 ATLASSERT( booleanExpression );
此外,TRACE() 宏的编译也受 _DEBUG 控制。
所有这些断言都只在 Debug版中才被编译,而在 Release 版中被忽略。唯一的例外是 VERIFY() 。事实上,这些宏都是调用了 assert() 函数,只不过附加了一些与库有关的调试代码。如果你在这些宏中加入了任何程序代码,而不只是布尔表达式(例如赋值、能改变变量值的函数调用 等),那么 Release 版都不会执行这些操作,从而造成错误。初学者很容易犯这类错误,查找的方法也很简单,因为这些宏都已在上面列出,只要利用 VC++ 的 Find in Files 功能在工程所有文件中找到用这些宏的地方再一一检查即可。另外,有些高手可能还会加入 #ifdef _DEBUG 之类的条件编译,也要注意一下。
顺便值得一提的是 VERIFY() 宏,这个宏允许你将程序代码放在布尔表达式里。这个宏通常用来检查 Windows API 的返回值。有些人可能为这个原因而滥用 VERIFY() ,事实上这是危险的,因为 VERIFY() 违反了断言的思想,不能使程序代码和调试代码完全分离,最终可能会带来很多麻烦。因此,专家们建议尽量少用这个宏。
4. /GZ 选项:这个选项会做以下这些事
(1) 初始化内存和变量。包括用 0xCC 初始化所有自动变量,0xCD ( Cleared Data ) 初始化堆中分配的内存(即动态分配的内存,例如 new ),0xDD ( Dead Data ) 填充已被释放的堆内存(例如 delete ),0xFD( deFencde Data ) 初始化受保护的内存(debug 版在动态分配内存的前后加入保护内存以防止越界访问),其中括号中的词是微软建议的助记词。这样做的好处是这些值都很大,作为指针是不可能的(而且 位系统中指针很少是奇数值,在有些系统中奇数的指针会产生运行时错误),作为数值也很少遇到,而且这些值也很容易辨认,因此这很有利于在 Debug 版中发现 Release 版才会遇到的错误。要特别注意的是,很多人认为编译器会用 0 来初始化变量,这是错误的(而且这样很不利于查找错误)。
(2) 通过函数指针调用函数时,会通过检查栈指针验证函数调用的匹配性。(防止原形不匹配)
(3) 函数返回前检查栈指针,确认未被修改。(防止越界访问和原形不匹配,与第二项合在一起可大致模拟帧指针省略 FPO )
通常 /GZ 选项会造成 Debug 版出错而 Release 版正常的现象,因为 Release 版中未初始化的变量是随机的,这有可能使指针指向一个有效地址而掩盖了非法访问。
除此之外,/Gm /GF 等选项造成错误的情况比较少,而且他们的效果显而易见,比较容易发现。
三、怎样“调试” Release 版的程序
遇到 Debug 成功但 Release 失败,显然是一件很沮丧的事,而且往往无从下手。如果你看了以上的分析,结合错误的具体表现,很快找出了错误,固然很好。但如果一时找不出,以下给出了一些在这种情况下的策略。
1. 前面已经提过,Debug 和 Release 只是一组编译选项的差别,实际上并没有什么定义能区分二者。我们可以修改 Release 版的编译选项来缩小错误范围。如上所述,可以把 Release 的选项逐个改为与之相对的 Debug 选项,如 /MD 改为 /MDd、/O1 改为 /Od,或运行时间优化改为程序大小优化。注意,一次只改一个选项,看改哪个选项时错误消失,再对应该选项相关的错误,针对性地查找。这些选项在 Project\Settings... 中都可以直接通过列表选取,通常不要手动修改。由于以上的分析已相当全面,这个方法是最有效的。
2. 在编程过程中就要时常注意测试 Release 版本,以免最后代码太多,时间又很紧。
3. 在 Debug 版中使用 /W4 警告级别,这样可以从编译器获得最大限度的错误信息,比如 if( i =0 )就会引起 /W4 警告。不要忽略这些警告,通常这是你程序中的 Bug 引起的。但有时 /W4 会带来很多冗余信息,如 未使用的函数参数 警告,而很多消息处理函数都会忽略某些参数。我们可以用
#progma warning(disable: ) //禁止
//...
#progma warning(default: ) //重新允许
来暂时禁止某个警告,或使用
#progma warning(push, 3) //设置警告级别为 /W3
//...
#progma warning(pop) //重设为 /W4
来暂时改变警告级别,有时你可以只在认为可疑的那一部分代码使用 /W4。
4.你也可以像 Debug 一样调试你的 Release 版,只要加入调试符号。在 Project/Settings... 中,选中 Settings for "Win Release",选中 C/C++ 标签,Category 选 General,Debug Info 选 Program Database。再在 Link 标签 Project options 最后加上 "/OPT:REF" (引号不要输)。这样调试器就能使用 pdb 文件中的调试符号。但调试时你会发现断点很难设置,变量也很难找到——这些都被优化过了。不过令人庆幸的是,Call Stack 窗口仍然工作正常,即使帧指针被优化,栈信息(特别是返回地址)仍然能找到。这对定位错误很有帮助。
啥是逆向工程
逆向工程
逆向工程,有的人也叫反求工程,英文是reverse engineering。
是指从实物上采集大量的三维坐标点,并由此建立该物体的几何模型,进而开发出同类产品的先进技术。逆向工程与一般的设计制造过程相反,是先有实物后有模型。仿形加工就是一种典型的逆向工程应用。
目前,逆向工程,逆向工程的应用已从单纯的技巧性手工操作,发展到采用先进的计算机及测量设备,进行设计、分析、制造等活动,如获取修模后的模具形状、分析实物模型、基于现有产品的创新设计、快速仿形制造等。
通俗说,从某种意义上说,逆向工程就是仿造。
这里的前提是默认我们传统的设计制造为“正向工程(当然,没有这种说法)”。
软件的逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程。逆向工程工具可以从已存在的程序中抽取数据结构、体系结构和程序设计信息。
四大逆向工程软件简介
Imageware
Imageware 由美国 EDS 公司出品,是最著名的逆向工程软件,正被广泛应用于汽车、航空、航天、消费家电、模具、计算机零部件等设计与制造领域。该软件拥有广大的用户群,国外有 BMW、Boeing、GM、Chrysler、Ford、raytheon、Toyota 等著名国际大公司,国内则有上海大众、上海交大、上海 DELPHI、成都飞机制造公司等大企业。
以前该软件主要被应用于航空航天和汽车工业,因为这两个领域对空气动力学性能要求很高,在产品开发的开始阶段就要认真考虑空气动力性。常规的设计流程首先根据工业造型需要设计出结构,制作出油泥模型之后将其送到风洞实验室去测量空气动力学性能,然后再根据实验结果对模型进行反复修改直到获得满意结果为止,如此所得到的最终油泥模型才是符合需要的模型。
如何将油泥模型的外形精确地输入计算机成为电子模型,这就需要采用逆向工程软件。首先利用三坐标测量仪器测出模型表面点阵数据,然后利用逆向工程软件(例如:Imageware surfacer)进行处理即可获得 class 1 曲面。
随着科学技术的进步和消费水平的不断提高,其它许多行业也开始纷纷采用逆向工程软件进行产品设计。
以微软公司生产的鼠标器为例,就其功能而言,只需要有三个按键就可以满足使用需要,但是,怎样才能让鼠标器的手感最好,而且经过长时间使用也不易产生疲劳感却是生产厂商需要认真考虑的问题。因此微软公司首先根据人体工程学制作了几个模型并交给使用者评估,然后根据评估意见对模型直接进行修改,直至修改到大家都满意为止,最后再将模型数据利用逆向工程软件 Imageware 生成 CAD 数据。
当产品推向市场后,由于外观新颖、曲线流畅,再加上手感也很好,符合人体工程学原理,因而迅速获得用户的广泛认可,产品的市场占有率大幅度上升。
Imageware 逆向工程软件的主要产品有:
Surfacer——逆向工程工具和 class 1 曲面生成工具
Verdict——对测量数据和CAD数据进行对比评估
Build it——提供实时测量能力,验证产品的制造性
RPM——生成快速成型数据
View——功能与 Verdict 相似,主要用于提供三维报告
Imageware 采用 NURB 技术,软件功能强大,易于应用。
Imageware 对硬件要求不高,可运行于各种平台:UNIX 工作站、PC 机均可,操作系统可以是 UNIX、NT、Windows 及其它平台。
Imageware 由于在逆向工程方面具有技术先进性,产品一经推出就占领了很大市场分额,软件收益正以 % 的年速率快速增长。
Surfacer 是 Imageware 的主要产品,主要用来做逆向工程,它处理数据的流程遵循点——曲线——曲面原则,流程简单清晰,软件易于使用。其流程如下:
一、点过程
读入点阵数据。
Surfacer 可以接收几乎所有的三坐标测量数据,此外还可以接收其它格式,例如:STL、VDA 等。
将分离的点阵对齐在一起(如果需要)。
有时候由于零件形状复杂,一次扫描无法获得全部的数据,或是零件较大无法一次扫描完成,这就需要移动或旋转零件,这样会得到很多单独的点阵。Surfacer 可以利用诸如圆柱面、球面、平面等特殊的点信息将点阵准确对齐。
对点阵进行判断,去除噪音点(即测量误差点)。
由于受到测量工具及测量方式的限制,有时会出现一些噪音点,Surfacer 有很多工具来对点阵进行判断并去掉噪音点,以保证结果的准确性。
通过可视化点阵观察和判断,规划如何创建曲面。
一个零件,是由很多单独的曲面构成,对于每一个曲面,可根据特性判断用用什么方式来构成。例如,如果曲面可以直接由点的网格生成,就可以考虑直接采用这一片点阵;如果曲面需要采用多段曲线蒙皮,就可以考虑截取点的分段。提前作出规划可以避免以后走弯路。
根据需要创建点的网格或点的分段。
Surfacer 能提供很多种生成点的网格和点的分段工具,这些工具使用起来灵活方便,还可以一次生成多个点的分段。
二、曲线创建过程
判断和决定生成哪种类型的曲线。
曲线可以是精确通过点阵的、也可以是很光顺的(捕捉点阵代表的曲线主要形状),或介于两者之间。
创建曲线。
根据需要创建曲线,可以改变控制点的数目来调整曲线。控制点增多则形状吻合度好,控制点减少则曲线较为光顺。
诊断和修改曲线。
可以通过曲线的曲率来判断曲线的光顺性,可以检查曲线与点阵的吻合性,还可以改变曲线与其它曲线的连续性(连接、相切、曲率连续)。
Surfacer 提供很多工具来调整和修改曲线。
三、曲面创建过程
决定生成那种曲面。
同曲线一样,可以考虑生成更准确的曲面、更光顺的曲面(例如 class 1 曲面),或两者兼顾,可根据产品设计需要来决定。
创建曲面。
创建曲面的方法很多,可以用点阵直接生成曲面(Fit free form),可以用曲线通过蒙皮、扫掠、四个边界线等方法生成曲面,也可以结合点阵和曲线的信息来创建曲面。还可以通过其它例如园角、过桥面等生成曲面。
诊断和修改曲面。
比较曲面与点阵的吻合程度,检查曲面的光顺性及与其它曲面的连续性,同时可以进行修改,例如可以让曲面与点阵对齐,可以调整曲面的控制点让曲面更光顺,或对曲面进行重构等处理。
英国 Triumph Motorcycles 有限公司的设计工程师 Chris Chatburn 说:“利用 Surfacer 我们可以在更短的时间内完成更多的设计循环次数,这样可以让我们减少 % 的设计时间。
”
最新发布的 Surfacer 。6 软件将以下工作流程的高性能工具完整的集成到一起:
[弹性的曲面创建工具]:可以在一个弹性的设计环境里非常方便的直接从曲线、曲面、或测量数据创建曲面,支持贝茨尔(Bezier)和非均匀有理 B 样条(NURBS)曲面两种方法。
用户可以选择适合的曲面方法,通过结合两种方法的优点来获益。
[动态的曲面修改工具]:允许用户在交互的方式下试探设计主题,立刻就可以看到是否美观和思路是否符合工程观念。设计、工程分析、制造的标准都通过精心的构造过程考虑进去,所以当每次修改曲面时不需要再重新校核标准。
[实时的曲面诊断工具]:可以提供诸如任意截面的连续性、曲面反射线情况、高亮度线、光谱图、曲率云图和园柱型光源照射下的反光图等多种方法,在设计的任何时候都可以查出曲面缺陷。
[有效的曲面连续性管理工具]:在复杂的曲面缝补等情况下,即使曲面进行了移动修改等操作,也能保证曲面同与之相连的曲面间的曲率连续,避免了乏味的手工再调整过程。
[强大的处理扫描数据能力]:根据 Rainbow 图法(相当于假设雨水从上面落下,由于形状差异导致雨水流速差异)、曲率大小变化云图法(对于一个完全光顺的 class 1 曲面,相当于曲率大小变化为零,对于两个不同曲面,此值会不同)将扫描数据分开,这样可以很快地捕捉产品的主要特征,并迅速建立各个相应曲面,避免了费事的分析和处理。
正是由于 Imageware 在计算机辅助曲面检查、曲面造型及快速样件等方面具有其它软件无可匹敌的强大功能,使它当之无愧的成为逆向工程领域的领导者。
Geomagic Studio
由美国 Raindrop (雨滴)公司出品的逆向工程和三维检测软件 Geomagic Studio 可轻易地从扫描所得的点云数据创建出完美的多边形模型和网格,并可自动转换为 NURBS 曲面。
该软件也是除了 Imageware 以外应用最为广泛的逆向工程软件。
Geomagic Studio 主要包括 Qualify、Shape、Wrap、Decimate、Capture 五个模块。主要功能包括:
自动将点云数据转换为多边形(Polygons)
快速减少多边形数目(Decimate)
把多边形转换为 NURBS 曲面
曲面分析(公差分析等)
输出与 CAD/CAM/CAE 匹配的文件格式(IGS、STL、DXF等)
1。
从CAD数模得到的产品模型
2。将CAD模型读入 Geomagic Studio
3。CAD 设计模型与从实际模型扫描所得的点云数据(不同坐标系)
4。扫描数据与CAD模型的自动对合
5。扫描数据与CAD模型的自动对齐
6。
误差以彩色图形直观显示
7。用户可标出任意点误差
8。 Qualify 的结果可以输出为 HTML 格式
CopyCAD
CopyCAD 是由英国 DELCAM 公司出品的功能强大的逆向工程系统软件,它能允许从已存在的零件或实体模型中产生三维CAD模型。
该软件为来自数字化数据的 CAD 曲面的产生提供了复杂的工具。CopyCAD 能够接受来自坐标测量机床的数据,同时跟踪机床和激光扫描器。
CopyCAD 简单的用户界面允许用户在尽可能短的时间内进行生产,并且能够快速掌握其功能,即使对于初次使用者也能做到这点。
使用 CopyCAD 的用户将能够快速编辑数字化数据,产生具有高质量的复杂曲面。该软件系统可以完全控制曲面边界的选取,然后根据设定的公差能够自动产生光滑的多块曲面,同时,CopyCAD 还能够确保在连接曲面之间的正切的连续性。
该软件的主要功能如下:
数字化点数据输入
DUCT 图形和三角模型文件
CNC 坐标测量机床
分隔的 ASCII 码和 NC 文件
激光扫描器、三维扫描器和 SCANTRON
PC ArtCAM
Renishaw MOD 文件
点操作
能够进行相加、相减、删除、移动以及点的隐藏和标记等点编辑
能够为测量探针大小对模型的三维偏置进行补偿
能够进行模型的转换、缩放、旋转和镜像等模型转换
能够对平面、多边形或其它模型进行模型裁剪
三角测量
在用户定义的公差和选项内的数字化模型的三角测量,包括:
① 原始的——法线设置
② 尖锐——尖锐特征强化
③ 特征匹配——来自点法线数据的特征
④ 关闭三角测量——为了快速绘图可以关闭模型
特征线的产生
边界——转换模型外边缘为特征线
间断——为找到简单的特征(如凸出和凹下)而探测数据里的尖锐边缘
能够转换数字化扫描线为特征线
输入的数据——能够从点文件中摘录多线条和样条曲线
曲面构造
通过在三角测量模型上跟踪直线产生多样化曲面
在连接的曲面之间,用已存在的曲面定义带有选项的正切连续性的边界
使用特征线指导和加快曲面定义
曲面错误检查
比较曲面与数字化点数据
报告最大限、中间值和标准值的错误背离
错误图形形象地显示变化
输出
IGES、CADDS4X
STL ASCII 码和二进制
DUCT 图形、三角模型和曲面
分隔的 ASCII 码
RapidForm
RapidForm 是韩国 INUS 公司出品的全球四大逆向工程软件之一,RapidForm 提供了新一代运算模式,可实时将点云数据运算出无接缝的多边形曲面,使它成为 3D Scan 后处理之最佳化的接口。
RapidForm 也将使您的工作效率提升,使 3D 扫描设备的运用范围扩大,改善扫描品质。
多点云数据管理介面
高级光学 3D 扫描仪会产生大量的数据(可达 , ~ ,点),由于数据非常庞大,因此需要昂贵的电脑硬件才可以运算,现在 RapidForm 提供记忆管理技术(使用更少的系统资源)可缩短您处理数据的时间。
多点云处理技术
可以迅速处理庞大的点云数据,不论是稀疏的点云还是跳点都可以轻易地转换成非常好的点云, RapidForm 提供过滤点云工具以及分析表面偏差的技术来消除 3D 扫描仪所产生的不良点云。
快速点云转换成多边形曲面的计算法
在所有逆向工程软件中,RapidForm 提供一个特别的计算技术,针对 3D 及 2D 处理是同类型计算,软件提供了一个最快最可靠的计算方法,可以将点云快速计算出多边形曲面。
RapidForm 能处理无顺序排列的点数据以及有顺序排列的点数据。
彩色点云数据处理
RapidForm 支持彩色 3D 扫描仪,可以生成最佳化的多边形,并将颜色信息映像在多边形模型中。在曲面设计过程中,颜色信息将完整保存,也可以运用 RP 成型机制作出有颜色信息的模型。
RapidForm 也提供上色功能,通过实时上色编辑工具,使用者可以直接对模型编辑自己喜欢的颜色。
点云合并功能
多个点扫描数据有可能经手动方式将特殊的点云加以合并,当然,RapidForm 也提供一技术,使用者可以方便地对点云数据进行各种各样的合并。
注:Roland 模具加工机随机所附的 PixForm 软件为 RapidForm 的 OEM 软件。