欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
編譯成release版本與debug版本的程序有何執行上的區別? VC/MFC / 基礎類(lèi)...
1.   變量。  
    大家都知道,debug跟release在初始化變量時(shí)所做的操作是不同的,debug是將每個(gè)字節位都賦成0xcc(注1),而release的賦值近似于隨機(我想是直接從內存中分配的,沒(méi)有初始化過(guò))。這樣就明確了,如果你的程序中的某個(gè)變量沒(méi)被初始化就被引用,就很有可能出現異常:用作控制變量將導致流程導向不一致;用作數組下標將會(huì )使程序崩潰;更加可能是造成其他變量的不準確而引起其他的錯誤。所以在聲明變量后馬上對其初始化一個(gè)默認的值是最簡(jiǎn)單有效的辦法,否則項目大了你找都沒(méi)地方找。代碼存在錯誤在debug方式下可能會(huì )忽略而不被察覺(jué)到,如debug方式下數組越界也大多不會(huì )出錯,在release中就暴露出來(lái)了,這個(gè)找起來(lái)就比較難了:(   還是自己多加注意吧  
   
  2.   自定義消息的消息參數。  
    MFC為我們提供了很好的消息機制,更增加了自定義消息,好處我就不用多說(shuō)了。這也存在debug跟release的問(wèn)題嗎?答案是肯定的。在自定義消息的函數體聲明時(shí),時(shí)常會(huì )看到這樣的寫(xiě)法:afx_msg   LRESULT   OnMessageOwn();   Debug情況下一般不會(huì )有任何問(wèn)題,而當你在Release下且多線(xiàn)程或進(jìn)程間使用了消息傳遞時(shí)就會(huì )導致無(wú)效句柄之類(lèi)的錯誤。導致這個(gè)錯誤直接原因是消息體的參數沒(méi)有添加,即應該寫(xiě)成:afx_msg   LRESULT   OnMessageOwn(WPARAM   wparam,   LPARAM   lparam);   (注2)  
   
  3.   release模式下不出錯,但debug模式下報錯。  
    這種情況下大多也是因為代碼書(shū)寫(xiě)不正確引起的,查看MFC的源碼,可以發(fā)現好多ASSERT的語(yǔ)句(斷言),這個(gè)宏只是在debug模式下才有效,那么就清楚了,release版不報錯是忽略了錯誤而不是沒(méi)有錯誤,這可能存在很大的隱患,因為是Debug模式下,比較方便調試,好好的檢查自己的代碼,再此就不多說(shuō)了。  
   
  4.   ASSERT,   VERIFY,   TRACE..........調試宏  
  這種情況很容易解釋。舉個(gè)例子:請在VC下輸入ASSERT然后選中按F12跳到宏定義的地方,這里你就能夠發(fā)現Debug中ASSERT要執行AfxAssertFailedLine,而Release下的宏定義卻為"#define   ASSERT(f)   ((void)0)"。所以注意在這些調試宏的語(yǔ)句不要用程序相關(guān)變量如i++寫(xiě)操作的語(yǔ)句。VERIFY是個(gè)例外,"#define   VERIFY(f)   ((void)(f))",即執行,這里的作用就不多追究了,有興趣可自己研究:)。  
   
   
  總結:  
    Debug與Release不同的問(wèn)題在剛開(kāi)始編寫(xiě)代碼時(shí)會(huì )經(jīng)常發(fā)生,99%是因為你的代碼書(shū)寫(xiě)錯誤而導致的,所以不要動(dòng)不動(dòng)就說(shuō)系統問(wèn)題或編譯器問(wèn)題,努力找找自己的原因才是根本。我從前就常常遇到這情況,經(jīng)歷過(guò)一次次的教訓后我就開(kāi)始注意了,現在我所寫(xiě)過(guò)的代碼我已經(jīng)好久沒(méi)遇到這種問(wèn)題了。下面是幾個(gè)避免的方面,即使沒(méi)有這種問(wèn)題也應注意一下:  
   
  1.   注意變量的初始化,尤其是指針變量,數組變量的初始化(很大的情況下另作考慮了)。  
  2.   自定義消息及其他聲明的標準寫(xiě)法  
  3.   使用調試宏時(shí)使用后最好注釋掉  
  4.   盡量使用try   -   catch(...)  
  5.   盡量使用模塊,不但表達清楚而且方便調試。  
   
  注1:  
  afc(afc)   網(wǎng)友提供:  
    debug版初始化成0xcc是因為0xcc在x86下是一條int   3單步中斷指令,這樣程序如果跑飛了遇到0xcc就會(huì )停下來(lái),這和單片機編程時(shí)一般將沒(méi)用的代碼空間填入jmp   0000語(yǔ)句是一樣地  
   
  注2:  
    不知大家有沒(méi)有遇到過(guò)這種情況,具體原因我也不太清楚,是不是調用時(shí)按著(zhù)默認的參數多分配了WPARAM+LPARAM的空間而破壞了應用程序的內存空間?還請高手來(lái)補充。  
   
  NightWolf   網(wǎng)友提供:我遇見(jiàn)過(guò),好像是在函數調用的時(shí)候參數入棧的問(wèn)題。因為MFC的消息使用宏寫(xiě)的,所以如果定義了OnMessage()的函數,編譯能夠通過(guò),但是調用一次后,堆棧指針發(fā)生了偏移。然后就。。。    
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Debug與Release版本的區別
VC程序調試技術(shù)--遙遠的地平線(xiàn)
vc下debug 版本和release版本的區別
VC程序在debug下運行的是正常顯示的,在release下就不會(huì )顯示了,怎么回事???
[轉載]DebugAssertionFailed!
從VC6.0到VS2008
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久