> ==>發信人: 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.