Release編譯有什麼特點?我的程式用Debug編譯能執行但是用Release卻不行,說明了什麼

時間 2021-05-05 15:34:14

1樓:Seeman

沒有本質區別。出現這種問題是由於你使用了第三方的庫,第三方庫的release版本和debug版本不一致導致你的程式出現問題。

2樓:狗肉 花與果

說明有bug。

比較典型的是未定義行為和未指定行為。debug下優化少,不一定觸發bug,release下各種優化觸發了bug

3樓:熱水一平

其實這也要看是什麼語言的,不同的程式語言的release和debug編譯的不同之處也不一樣。但是總體而言,兩者最主要的區別是debug模式編譯時會包含debug的資訊,而release模式則會對程式的執行進行優化。

至於什麼是debug資訊,你可以這麼想象一下,你打斷點debug的時候,實際上是執行了乙個叫debug的外部程式,這個程式會根據對你編譯過的程式的執行狀況進行追蹤。這裡最容易理解的就是什麼地方有斷點應該停下來,這個資訊肯定也要記錄下來,可以讓外部的debug程式知道,這裡需要停下來。當然debug資訊還包括很多其它內容,比如某個變數叫什麼名字,等等(電腦在執行你的程式時,實際上是不需要知道變數名字的,需要的只是該變數在記憶體中的位址)。

說到這裡你大概也可以想象,帶著這麼多額外的資訊對不需要debug的程式,會帶來不少額外的浪費,這也是為什麼release方式的編譯會更加優化。當然說起編譯的優化肯定不止這些,這又是另外乙個可以寫本書的話題了

4樓:蝦公尺掠奪者

Debug能執行、Release報錯,且兩者均能編譯。最有可能的兩種情況: 陣列越界,或者陣列未初始化。

Debug模式會幫你初始化陣列,且有一些除錯資訊,導致你指標跑出陣列範圍了還有值。

5樓:

原理都是一樣,沒有什麼本質上的區別。你執行不了的原因可能是因為對應的dll沒有拷貝,例如你debug依賴的動態庫和release是不一樣的,部署的時候得要部署正確。

6樓:Reversing

你這種情況需要檢查下陣列寫入時是不是越界了。

Debug和Release最簡單的區別,就是在優化層面上,Debug會寫入一堆除錯資訊,棧和堆的初始化資料也比較獨特,在Debug編譯模式下,你陣列越界寫入,覆蓋某些資料,只要運氣夠好沒有改變返回位址等一系列重要資料,是不至於崩的。

但Release不一樣,首先,多餘的東西絕不給你留著,盡量讓程式減小體積。其次,是還存在其他優化,例如指令重排、流水線優化等,二進位制資料的直觀順序相比於Debug會有變化。

所以Release相比於Debug,當然更容易崩。

7樓:

導致這個問題,最有可能就是變數沒有正確初始化,debug版編譯器會幫你初始化成特殊的值,release版不會。

但這部不表示debug版就沒問題,只是這個問題藏的跟深了。

當然遇到編譯器的bug也不是不可能,但在編譯器面前還是謙虛一點吧。

淮揚菜有什麼特點?

立智英語 小小智在揚州可是乙個小吃貨,作為世界美食之都,揚州是淮揚菜的代表。淮揚菜的特點是什麼呢?吃了這麼久的揚州美食,小小智覺得可能就是淡而不凡。口味稍顯平淡,更加凸顯本味,但卻因細緻而不凡,卓越的刀工讓每一道淮揚菜都變成了藝術品,所以頗得文人墨客的青睞。不過,對於普普通通的揚州人來說,什麼特點,...

徽商有什麼特點?

葉如強 徽商也被稱之為儒商,不僅有著非常高的經商頭腦,文化水平也很高。徽商主要特點就是童叟無欺 貨真價實,非常看重誠信。徽商還尤其看重教育,很多徽商經商回來之後就開始資助教育文化事業 辦學,其中最為著名的當屬 紫陽書院 它就是在徽商的資助下建立的。不僅僅是教育,在戲劇方面,徽商也資助了徽戲,促進了徽...

求教大神指點我有什麼問題?

姜嵐 第一張,人離樹太遠了,胳膊申的太直,沒有古典的柔和美。第二三張,似乎是明制的披風 還是對襟衫,我不是明製粉所以不知道是不是叫這個 裡面直接穿的抹胸?而且不是明制的抹胸,也許還有穿對襟衫,但是看不出來,首先搭配不對 這個倒不是重點,漢服混搭其實也有很好看的穿法 其次外面厚重裡面清涼感覺不對 這個...