精華區beta Programming 關於我們 聯絡資訊
> ==>發信人: Contactman.bbs@bbs.badcow.com.tw (小白退散!), 信區: programming > ※ 引述《prac.bbs@ptt.cc (浦雷克)》之銘言: > : ※ 引述《Contactman.bbs@bbs.badcow.com.tw (小白退散!)》之銘言: > : : 首先, 請先問問自己, Debug 和 Release到底差在哪理? > : : Debug用的是一個編譯器, Release 用的是另一個不同的編譯器嗎? > : : 當然不是, 那他們對編譯器下的參數到底是有哪些不同? > : : 說穿了, Release 有對你的Code做最佳化, 也就是說, 編譯器會對你的Code > : : 做自認為最好的方式重新編寫, 所以你原始程式的流程在Release很可能都沒有 > : : 保留下來, 這樣的情況, 如何用你的Source Code做Step by Step的Debug? > : : (你只會看到程式東跳西跳....) > : : Release版在做Debug, 只能追蹤 Call stack 來猜測問題出在哪, 還有追蹤變數 > : : 內容的變化來"猜".... > : : 不過你的問題, 就經驗來說, 大多是變數初始化的問題. > : : Debug會幫你自動初始化原始型別的變數內容, 這個步驟在Release版內常被 > : : 編譯器省略. 你可能必須明白指定初始化的敘述. > : 要在release版中trace, > : 首先將release版中的最佳化關掉(Project->Setting裡的Optimization選Disable) > 把最佳化關掉, Release版還有什麼意義?? > 這不就跟Debug版一樣, 然後原PO的問題還是找不出來, 等到最佳化一開還是死. > 重點還是去看看哪些變數沒有做好初始化宣告吧!! 變數沒有出始化是 debug 能跑 release 不能跑的一個很有可能的 bug 但用 release bug, 可以很清楚的看出來是哪些變數沒有被初始化 還是有用 > : 再將整個project 做Rebuild > : 執行Build出來的程式...利用Attach process的功能, 並安插中斷點 > : 則可逐步trace > : ps.若程式屬於跑一下就結束的...可在裡頭加入一個無窮迴圈, 如 > : int k = 1; > : while(k == 1) > : { > : Sleep(500); > : } > : 再將中斷點設於此 -- ◎ Origin: 中央松濤站□bbs.csie.ncu.edu.tw From: 61-229-123-233.dynamic.hinet.