Board logo

主題: [討論] [討論]VS2015除錯模式 (已解決) [打印本頁]

發表人: LiuRambo    時間: 2016-9-11 11:01 AM     主題: [討論]VS2015除錯模式 (已解決)

之前一直使用VS2008來寫VB程式 也很習慣使用除錯模式來看程式
最近換了新公司 有安裝VS2015 想說來試試看
結果卻令我非常苦惱
請看以下範例:
1:A = 3
2:FOR i = 0 to 6
3:if i = A then
4:  exit FOR
5:endif
6:NEXT

以2008來跑偵錯
順序會是1->2->3->5->2->3->5->2->3->5.......->6

可是當我用2015時
順序卻不一定是照邏輯上要略過4
反而可能是1 2 4 1 2 4
我之所以說可能 是因為看到幾個迴圈都不是一致性
然後奇怪地當迴圈執行中 明明看到i已經是等於3了 但卻沒有進入4去執行
反而繼續跑到迴圈結束(重點是沒有依照3的指令進入4)
害我多花了一天的時間抓到這奇怪的事情
後來解決方法 竟還是拿2008來執行
結果一切正常!!!

是我太笨不會用VS2015嗎
用了幾天發現以寫作環境其實很方便好用的勒
換回2008還真是也點不習慣

[LiuRambo 在  2016-9-16 12:47 PM 作了最後編輯]
發表人: 陽だまり    時間: 2016-9-11 11:59 AM

不太了解上面的1、2、3、5是怎麼得來的
是指要傾印出i嗎

如果是的話,假設把傾印放在next上面的話
應該是i應該是0、1、2才對
因為i為3時,等於A,就會離開for迴圈了不是
發表人: Adsmt    時間: 2016-9-14 03:20 AM

因為 compiler 會最佳化,你迴圈內沒東西,所以就沒進去了。
事實上這個程式被最佳化後可能完全沒有跑就結束了,你試著中間做一些事再看看。

舉例來說吧,像下面這個程式:
a=0
for i=1 to 5
  a++
next
print a

被最佳化後會變成:
a = 5
print a

迴圈整個不見了。這個在做動畫的時候就可以感受到了,例如你要用迴圈慢慢改變座標來移動一個圖形,結果會發現它只會把圖形印在最後的位置,不會有你預期中慢慢移動的效果。

在compiler設定那邊應該可以取消最佳化,應該就能看到你想要的結果。
發表人: LiuRambo    時間: 2016-9-15 11:36 PM

找到原因了

因為原本專案一直都是由一人處理
現在多了我 環境完全不同 元件等都需要處理
所以一堆錯誤導致無法在我電腦上作專案建置
然後當程式進入除錯模式時 眼前所看到的程式行與實際執行的還是遠端電腦debug目錄下的程式就完全不相符合
所以才會出現許多不能理解的怪異狀況
當我將所有錯誤全部排除後 將發布路徑設定在我單機 然後重新建置專案成功
除錯模式就完全正常了




歡迎光臨 TWed2k (http://twed2k.org/) Powered by Discuz! 4.1.0