2013-02-27 45 views
1

我已經有好幾次使用Visual Studio編寫程序的地方,並且沿着換行符的某處。當然,我的第一個想法是在程序的早期設置一個斷點,然後慢慢地逐行遍歷代碼,一行一行,直到出現錯誤。爲什麼某些程序在使用調試器時工作,但在運行正常的調試執行時不能運行?

但我經常發現,在調試器中緩慢地逐步執行代碼時,一切正常。但是,當我試圖運行沒有斷點的程序時,出現了問題。

爲什麼會發生這種情況?逐行執行代碼與實際上不同,只是在dubug模式下運行程序?

(我不是在談論調試VS版本,我說的是調試VS行由行調試)

回答

2

一個原因可能是,當程序以「全速」運行時以及在調試器中暫停線程時,您在多個執行線程之間發生時間問題。

0

這可能是因爲,似乎正確地發生一個線程的一些不安全的操作當單步執行代碼時,而不是在運行時。編譯器優化被排除,因爲您確定您正在運行調試版本。

0

在調試器內部運行,實質上改變了運行時選項,例如:堆操作,以便可以檢測到錯誤並將其呈現給用戶。

請參閱here

當某個進程在任何調試器下運行時,會自動爲進程中的所有堆啓用某些堆調試選項 。

這不一定是你的問題,而是一個可能的候選人。

+0

如何在調試器下運行更改堆行爲? – tenfour 2013-02-27 15:24:00

+0

研究,但關閉LFH是它的一件事,這可以大大改變程序的行爲 – 2013-02-27 15:25:48

相關問題