??xml version="1.0" encoding="utf-8" standalone="yes"?>精品久久久久久国产,久久精品国产亚洲AV嫖农村妇女 ,久久综合给合久久国产免费http://www.shnenglu.com/AloneInSkyline/archive/2012/06/23/62353.html#179883Thornton25NettieThornton25NettieSat, 23 Jun 2012 10:52:00 GMThttp://www.shnenglu.com/AloneInSkyline/archive/2012/06/23/62353.html#179883http://goodfinance-blog.com/topics/home-loans">home loans</a>. Just because it would help you definitely. I take bank loan every year and feel myself fine because of that.

Thornton25Nettie 2012-06-23 18:52 发表评论
]]>
re: VS2005 讄release 调试http://www.shnenglu.com/AloneInSkyline/archive/2011/07/22/151678.html#151679独_天独_天Fri, 22 Jul 2011 15:27:00 GMThttp://www.shnenglu.com/AloneInSkyline/archive/2011/07/22/151678.html#151679Debug ?Release 的真正秘密,在于一l编译选项。下面列Z分别针对二者的选项Q当焉此之外还有其他一些,?Fd /FoQ但区别q不重要Q通常他们也不会引?Release 版错误,在此不讨论)
Debug 版本

参数 含义
/MDd /MLd ?/MTd 使用 Debug runtime library (调试版本的运行时d数库)
/Od 关闭优化开?
/D "_DEBUG" 相当?#define _DEBUG,打开~译调试代码开?(主要针对assert函数)
/ZI 创徏 Edit and continue(~辑l箋)数据库,q样在调试过E中如果修改了源代码不需重新~译
/GZ 可以帮助捕获内存错误
/Gm 打开最化重链接开养I 减少链接旉

Release 版本

参数 含义
/MD /ML ?/MT 使用发布版本的运行时d数库
/O1 ?/O2 优化开养I使程序最或最?
/D "NDEBUG" 关闭条g~译调试代码开?(即不~译assert函数)
/GF 合ƈ重复的字W串Q?q将字符串常量放到只d存, 防止被修?

实际上,Debug ?Release q没有本质的界限Q他们只是一l编译选项的集合,~译器只是按照预定的选项行动。事实上Q我们甚臛_以修改这些选项Q从而得C化过的调试版本或是带跟踪语句的发布版本?
哪些情况?Release 版会出错
有了上面的介l,我们再来逐个对照q些选项看看 Release 版错误是怎样产生?
1、Runtime LibraryQ链接哪U运行时d数库通常只对E序的性能产生影响。调试版本的 Runtime Library 包含了调试信息,q用了一些保护机制以帮助发现错误Q因此性能不如发布版本。编译器提供?Runtime Library 通常很稳定,不会造成 Release 版错误;倒是׃ Debug ?Runtime Library 加强了对错误的检,如堆内存分配Q有时会出现 Debug 有错?Release 正常的现象。应当指出的是,如果 Debug 有错Q即?Release 正常Q程序肯定是?Bug 的,只不q可能是 Release 版的某次q行没有表现出来而已?
2、优化:q是造成错误的主要原因,因ؓ关闭优化时源E序基本上是直接译的,而打开优化后编译器会作Zpd假设。这c错误主要有以下几种Q?
1. 帧指?Frame Pointer)省略Q简UFPOQ:在函数调用过E中Q所有调用信息(q回地址、参敎ͼ以及自动变量都是攑֜栈中的。若函数的声明与实现不同Q参数、返回倹{调用方式)Q就会生错误,?Debug 方式下,栈的讉K通过 EBP 寄存器保存的地址实现Q如果没有发生数l越界之cȝ错误Q或是越界“不多”)Q函数通常能正常执行;Release 方式下,优化会省?EBP 栈基址指针Q这样通过一个全局指针讉K栈就会造成q回地址错误是程序崩溃?
C++ 的强cdҎ能查出大多数这L错误Q但如果用了强制cd转换Q就不行了。你可以?Release 版本中强制加?Oy-~译选项来关掉指针省略Q以定是否此类错误。此c错误通常有:MFC 消息响应函数书写错误。正的应ؓQ?

afx_msg LRESULT OnMessageOwn
(WPARAM wparam, LPARAM lparam);

ON_MESSAGE 宏包含强制类型{换。防止这U错误的Ҏ之一是重定义 ON_MESSAGE 宏,把下列代码加?stdafx.h 中(?include "afxwin.h"之后Q?函数原Ş错误时编译会报错?

#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 告诉~译器该变量可能被程序之外的未知方式修改Q如pȝ、其他进E和U程Q。优化程序ؓ了ɽE序性能提高Q常把一些变量放在寄存器中(cM?register 关键字)Q而其他进E只能对该变量所在的内存q行修改Q而寄存器中的值没变?
如果你的E序是多U程的,或者你发现某个变量的g预期的不W而你信已正的讄了,则很可能遇到q样的问题。这U错误有时会表现为程序在最快优化出错而最优化正常。把你认为可疑的变量加上 volatile 试试?
3. 变量优化Q优化程序会Ҏ变量的用情况优化变量。例如,函数中有一个未被用的变量Q在 Debug 版中它有可能掩盖一个数l越界,而在 Release 版中Q这个变量很可能被优化调Q此时数l越界会破坏栈中有用的数据。当Ӟ实际的情况会比这复杂得多。与此有关的错误有非法访问,包括数组界、指针错误等。例如:

void fn(void)
{
int i;
i = 1;
int a[4];
{
int j;
j = 1;
}
a[-1] = 1;
//当然错误不会q么明显Q例如下标是变量
a[4] = 1;
}


j 虽然在数l越界时已出了作用域Q但其空间ƈ未收回,因?i ?j ׃掩盖界。?Release 版由?i、j q未其很大作用可能会被优化掉Q从而栈被破坏?
3. DEBUG ?NDEBUG Q当定义?_DEBUG Ӟassert() 函数会被~译Q?NDEBUG 时不被编译。此外,TRACE() 宏的~译也受 _DEBUG 控制?
所有这些断a都只?Debug版中才被~译Q而在 Release 版中被忽略。唯一的例外是 VERIFY()。事实上Q这些宏都是调用了assert()函数Q只不过附加了一些与库有关的调试代码。如果你在这些宏中加入了ME序代码Q而不只是布尔表达式(例如赋倹{能改变变量值的函数调用{)Q那么Release版都不会执行q些操作Q从而造成错误。初学者很Ҏ犯这c错误,查找的方法也很简单,因ؓq些宏都已在上面列出Q只要利?VC++ ?Find in Files 功能在工E所有文件中扑ֈ用这些宏的地方再一一查即可。另外,有些高手可能q会加入 #ifdef _DEBUG 之类的条件编译,也要注意一下?
Z值得一提的是VERIFY()宏,q个宏允怽程序代码放在布表辑ּ里。这个宏通常用来?Windows API的返回倹{有些h可能个原因而滥用VERIFY()Q事实上q是危险的,因ؓVERIFY()q反了断a的思想Q不能ɽE序代码和调试代码完全分,最l可能会带来很多ȝ。因此,专家们徏议尽量少用这个宏?
4. /GZ 选项Q这个选项会做以下q些事:
1. 初始化内存和变量。包括用 0xCC 初始化所有自动变量,0xCD ( Cleared Data ) 初始化堆中分配的内存Q即动态分配的内存Q例?new Q,0xDD ( Dead Data ) 填充已被释放的堆内存Q例?delete Q,0xFD( deFencde Data ) 初始化受保护的内存(debug 版在动态分配内存的前后加入保护内存以防止越界访问)Q其中括号中的词是微软徏议的助记词。这样做的好处是q些值都很大Q作为指针是不可能的Q而且 32 位系l中指针很少是奇数|在有些系l中奇数的指针会产生q行旉误)Q作为数g很少遇到Q而且q些g很容易L认,因此q很有利于在 Debug 版中发现 Release 版才会遇到的错误。要特别注意的是Q很多h认ؓ~译器会?来初始化变量Q这是错误的Q而且q样很不利于查找错误Q?
2. 通过函数指针调用函数Ӟ会通过查栈指针验证函数调用的匹配性。(防止原Ş不匹配)
3. 函数q回前检查栈指针Q确认未被修攏V(防止界讉K和原形不匚wQ与W二合在一起可大致模拟帧指针省?FPO Q通常 /GZ 选项会造成 Debug 版出错?Release 版正常的现象Q因?Release 版中未初始化的变量是随机的,q有可能使指针指向一个有效地址而掩盖了非法讉K。除此之外,/Gm/GF{选项造成错误的情冉|较少Q而且他们的效果显而易见,比较Ҏ发现?
怎样“调试?Release 版的E序
遇到Debug成功但Releasep|Q显然是一件很沮的事Q而且往往无从下手。如果你看了以上的分析,l合错误的具体表玎ͼ很快扑և了错误,固然很好。但如果一时找不出Q以下给Z一些在q种情况下的{略?
1. 前面已经提过QDebug和Release只是一l编译选项的差别,实际上ƈ没有什么定义能区分二者。我们可以修改Release版的~译选项来羃错误范围。如上所qͼ可以把Release 的选项逐个改ؓ与之相对的Debug选项Q如/MD改ؓ/MDd?O1改ؓ/OdQ或q行旉优化改ؓE序大小优化。注意,一ơ只改一个选项Q看改哪个选项旉误消失,再对应该选项相关的错误,针对性地查找。这些选项在Project\Settings...中都可以直接通过列表选取Q通常不要手动修改。由于以上的分析已相当全面,q个Ҏ是最有效的?
2. 在编E过E中p时常注意试 Release 版本Q以免最后代码太多,旉又很紧?
3. ?Debug 版中使用 /W4 警告U别Q这样可以从~译器获得最大限度的错误信息Q比?if( i =0 )׃引v /W4 警告。不要忽略这些警告,通常q是你程序中?Bug 引v的。但有时 /W4 会带来很多冗余信息,?未用的函数参数 警告Q而很多消息处理函数都会忽略某些参数。我们可以用:

#progma warning(disable: 4702)
//止
//...
#progma warning(default: 4702)
//重新允许来暂时禁止某个警告,或?
#progma warning(push, 3)
//讄警告U别?/W3
//...
#progma warning(pop)
//重设?/W4


来暂时改变警告别,有时你可以只在认为可疑的那一部分代码使用 /W4?
4. 你也可以像Debug一栯试你的Release版,只要加入调试W号。在Project/Settings... 中,选中 Settings for "Win32 Release"Q选中 C/C++ 标签QCategory ?GeneralQDebug Info ?Program Database。再?Link 标签 Project options 最后加?"/OPT:REF" (引号不要?。这栯试器p使用 pdb 文g中的调试W号?
但调试时你会发现断点很难讄Q变量也很难扑ֈ??q些都被优化q了。不qo人庆q的是,Call StackH口仍然工作正常Q即使指针被优化,栈信息(特别是返回地址Q仍然能扑ֈ。这对定位错误很有帮助?
==========================================================================
别h原创的文档,引用一下:


DEBUG和RELEASE 版本差异及调试相关问题:
. 内存分配问题

1. 变量未初始化。下面的E序在debug中运行的很好?

thing * search(thing * something)
BOOL found;
for(int i = 0; i < whatever.GetSize(); i++)
{
if(whatever[i]->field == something->field)
{ /* found it */
found = TRUE;
break;
} /* found it */
}
if(found)
return whatever[i];
else
return NULL;
而在release中却不行Q因为debug中会自动l变量初始化found=FALSE,而在release版中则不会。所以尽可能的给变量、类或结构初始化?

2. 数据溢出的问?

如:char buffer[10];
int counter;

lstrcpy(buffer, "abcdefghik");

在debug版中buffer的NULL覆盖了counter的高位,但是除非counter>16M,什么问题也没有。但是在release版中Qcounter可能被放在寄存器中,q样NULLp盖了buffer下面的空_可能是函数的返回地址Q这导致ACCESS ERROR?

3. DEBUG版和RELEASE版的内存分配方式是不同的 。如果你在DEBUG版中甌 ele ? 6*sizeof(DWORD)=24bytes,实际上分配给你的?2bytesQdebug版以32bytes为单位分配)Q? 而在release版,分配l你的就?4bytesQrelease版以8bytes为单位)Q所以在debug版中如果你写ele[6],可能不会有什么问题,而在release版中Q就有ACCESS VIOLATE?

II. ASSERT和VERIFY

1. ASSERT在Release版本中是不会被编译的?

ASSERT宏是q样定义?

#ifdef _DEBUG
#define ASSERT(x) if( (x) == 0) report_assert_failure()
#else
#define ASSERT(x)
#endif
实际上复杂一些,但无关紧要。假如你在这些语句中加了E序中必要有的代码
比如

ASSERT(pNewObj = new CMyClass);

pNewObj->MyFunction();

q种时候Release版本中的pNewObj不会分配到空?

所以执行到下一个语句的时候程序会报该E序执行了非法操作的错误。这时可以用VERIFY Q?

#ifdef _DEBUG
#define VERIFY(x) if( (x) == 0) report_assert_failure()
#else
#define VERIFY(x) (x)
#endif
q样的话Q代码在release版中可以执行了?

III. 参数问题Q?

自定义消息的处理函数Q必d义如下:

afx_msg LRESULT OnMyMessage(WPARAM, LPARAM);

q回值必LHRESULT型,否则Debug会过Q而Release出错

IV. 内存分配

保证数据创徏和清除的l一性:如果一个DLL提供一个能够创建数据的函数Q那么这个DLL同时应该提供一个函数销毁这些数据。数据的创徏和清除应该在同一个层ơ上?

V. DLL的灾?

Z不同版本DLL混合造成的不一致性Ş象的UCؓ “动态连接库的地狱?DLL Hell) Q甚臛_软自׃q么?http://msdn.microsoft.com/library/techart/dlldanger1.htm)?

如果你的E序使用你自qDLL时请注意Q?

1. 不能debug和release版的DLL混合在一起用。debug都是debug版,release版都是release版?

解决办法是将debug和release的程序分别放在主E序的debug和release目录?


2. 千万不要以ؓ静态连接库会解决问题,那只会情况更糟p?

VI. RELEASE板中的调? Q?

1. ASSERT() 改ؓ VERIFY() 。找出定义在"#ifdef _DEBUG"中的代码Q如果在RELEASE版本中需要这些代码请他们移到定义外。查找TRACE(...)中代码,因ؓq些代码在RELEASE中也不被~译? 误真检查那些在RELEASE中需要的代码是否q没有被便宜?

2. 变量的初始化所带来的不同,在不同的pȝQ或是在DEBUG/RELEASE版本间都存在q样的差异,所以请对变量进行初始化?

3. 是否在编译时已经有了警告?请将警告U别讄??,然后保证在编译时没有警告出现.

VII. Project Settings" ? "C++/C " 目下优化选项改ؓDisbaleQDebugQ。编译器的优化可能导致许多意想不到的错误Q请参?a target="_new" href="http://www.pgh.net/~newcomer/debug_release.htm

1. 此外对RELEASE版本的Y件也可以q行调试Q请做如下改动:

?quot;Project Settings" ? "C++/C " 目下设|? "category" ? "General" q且?quot;Debug Info"讄? "Program Database"?

?quot;Link"目下选中"Generate Debug Info"查框?

"Rebuild All"

如此做法会生的一些限Ӟ

无法获得在MFC DLL中的变量的倹{?

必须对该软g所使用的所有DLL工程都进行改动?

另:

MS BUGQMS的一份技术文档中表明Q在VC5中对于DLL?quot;Maximize Speed"优化选项q未被完全支持,因此q将会引起内存错误ƈDE序崩溃?

2. www.sysinternals.com有一个程序DebugViewQ用来捕捉OutputDebugString的输出,q行h后(估计是自设ؓsystem debuggerQ就可以观看所有程序的OutputDebugString的输出。此后,你可以脱VC来运行你的程序ƈ观看调试信息?

3. 有一个叫Gimpel Lint的静态代码检查工P据说比较好用?a target="_new" >http://www.gimpel.com 不过要化$的?

参考文献:

1) http://www.cygnus-software.com/papers/release_debugging.html

2) http://www.pgh.net/~newcomer/debug_release.htm




独_天 2011-07-22 23:27 发表评论
]]>
re: VC中利用BMP作ؓ背景的方法ȝhttp://www.shnenglu.com/AloneInSkyline/archive/2011/02/13/138079.html#139974独_天独_天Sun, 13 Feb 2011 05:52:00 GMThttp://www.shnenglu.com/AloneInSkyline/archive/2011/02/13/138079.html#139974
// TODO: Add your message handler code here
CBitmap bmp,*pOldBmp;
BITMAP bmpInfo;
CDC dcMem;
CRect rect;
GetDlgItem(IDC_STATICP)->GetClientRect(rect);
dcMem.CreateCompatibleDC(& dc );
if( bmp.Attach(::LoadImage(NULL, Common_Login,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)))
{
bmp.GetBitmap( &bmpInfo );
pOldBmp = dcMem.SelectObject( &bmp );
dc.StretchBlt( rect.left+5,rect.top,rect.Width()+5,rect.Height(),
&dcMem,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY );
dcMem.SelectObject( pOldBmp );
bmp.Detach();
}

dcMem.DeleteDC();

独_天 2011-02-13 13:52 发表评论
]]>
re: 一个网|取信息和注册到另一个网늚程?/title><link>http://www.shnenglu.com/AloneInSkyline/archive/2009/10/07/64166.html#98005</link><dc:creator>周雄</dc:creator><author>周雄</author><pubDate>Wed, 07 Oct 2009 02:27:00 GMT</pubDate><guid>http://www.shnenglu.com/AloneInSkyline/archive/2009/10/07/64166.html#98005</guid><description><![CDATA[我想问一下你的那个CWTString 是要包含那个头文件的啊,可以的话回复下我的Q:276396287,或者邮crow024@163.comQ要是能把那分源码发一下过来那更加感谢Q!<img src ="http://www.shnenglu.com/AloneInSkyline/aggbug/98005.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/AloneInSkyline/" target="_blank">周雄</a> 2009-10-07 10:27 <a href="http://www.shnenglu.com/AloneInSkyline/archive/2009/10/07/64166.html#98005#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 教训得经验—一个NULLI字D?/title><link>http://www.shnenglu.com/AloneInSkyline/archive/2009/10/07/75299.html#98004</link><dc:creator>周雄</dc:creator><author>周雄</author><pubDate>Wed, 07 Oct 2009 02:26:00 GMT</pubDate><guid>http://www.shnenglu.com/AloneInSkyline/archive/2009/10/07/75299.html#98004</guid><description><![CDATA[我想问一下你的那个提取网信息源码里的CWTString 是要包含那个头文件的啊,可以的话回复下我的Q:276396287,或者邮crow024@163.comQ要是能把那分源码发一下过来那更加感谢Q!<img src ="http://www.shnenglu.com/AloneInSkyline/aggbug/98004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/AloneInSkyline/" target="_blank">周雄</a> 2009-10-07 10:26 <a href="http://www.shnenglu.com/AloneInSkyline/archive/2009/10/07/75299.html#98004#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.dr-knoell-consult.com.cn " target="_blank">þ޾ƷVA</a>| <a href="http://www.sanghuan.cn" target="_blank">þþþùһ</a>| <a href="http://www.oulihong.cn" target="_blank">þþþavר </a>| <a href="http://www.a88wx.cn" target="_blank">ɫ͵͵888ŷƷþþ</a>| <a href="http://www.168yetibizhi.cn" target="_blank">777þµַ</a>| <a href="http://www.228456.cn" target="_blank">ھƷþþþþĻ</a>| <a href="http://www.wsjpt.cn" target="_blank">ùþþۺ</a>| <a href="http://www.sunriseydy.cn" target="_blank">ɫAVԾþþþþ</a>| <a href="http://www.vueq.cn" target="_blank">ɫۺϾþ</a>| <a href="http://www.bvvnm.com.cn" target="_blank">ɫݺݾþۺ</a>| <a href="http://www.nokia-flash.cn" target="_blank">ƷþùƷ99</a>| <a href="http://www.stylefair.com.cn" target="_blank">þٸ۲AV</a>| <a href="http://www.23d6.cn" target="_blank">þþþ޾Ʒ</a>| <a href="http://www.156v7.cn" target="_blank">þþþþþ</a>| <a href="http://www.jsxtcmss.cn" target="_blank">ۺϾþþþ</a>| <a href="http://www.nbqyz.cn" target="_blank">ƷþþþþĻ</a>| <a href="http://www.qhklmy.cn" target="_blank">˾Ʒþһav</a>| <a href="http://www.gaohuirong.cn" target="_blank">þҹɫƷ</a>| <a href="http://www.orionstaros.cn" target="_blank">Ʒŷþþþ޹</a>| <a href="http://www.kongqueyuhn.cn" target="_blank">þĻ</a>| <a href="http://www.laowang66.com.cn" target="_blank">þþþùɫAVѹۿ</a>| <a href="http://www.rz2.com.cn" target="_blank">91ɫۺϾþ</a>| <a href="http://www.usgold.cn" target="_blank">ľƷþþþ޲</a>| <a href="http://www.248hh.cn" target="_blank">þľƷĻ</a>| <a href="http://www.tja4.cn" target="_blank">һaƬþëƬ</a>| <a href="http://www.gaguni.cn" target="_blank">þþƷĻ̾</a>| <a href="http://www.dliif.cn" target="_blank">þۺɫһ</a>| <a href="http://www.dlygbx.cn" target="_blank">ƷþþþþĻ</a>| <a href="http://www.yangrendong.com.cn" target="_blank">Ʒþþþþþ</a>| <a href="http://www.secwatch.com.cn" target="_blank">͵þþþƷר</a>| <a href="http://www.5uatm.cn" target="_blank">þݺҹҹ2014</a>| <a href="http://www.chabaibaike.cn" target="_blank">ݹ˾þ91</a>| <a href="http://www.fzcxpc.cn" target="_blank">66ƷۺϾþþþþþ</a>| <a href="http://www.lovebuyhome.com.cn" target="_blank">avþþþòվ</a>| <a href="http://www.gm53.cn" target="_blank">Ļþۺ</a>| <a href="http://www.zqek.cn" target="_blank">þˬˬƬAV鷳</a>| <a href="http://www.pchenshimin.com.cn" target="_blank">þþþþùƷ</a>| <a href="http://www.xh68.cn" target="_blank">þùҹAVӰԺ</a>| <a href="http://www.ding-u.cn" target="_blank">þþþþ޾Ʒ</a>| <a href="http://www.zhantu520.cn" target="_blank">޹Ʒľþþ</a>| <a href="http://www.xqt007.cn" target="_blank">ŷһþþþþþôƬ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>