2009-06-24 43 views
9

我們有一個大型C++應用程序,有時我們需要運行調試版本來調查bug。調試版本比發佈版本慢得多,幾乎無法使用。如何使MSVC調試版本運行更快

有什麼技巧可以使MSVC Debug在不犧牲太多可調試性的情況下更快地執行構建?

+0

爲什麼這是社區wiki? – Aamir 2009-06-24 10:58:17

+0

過去我被告知所有問題都是「社區wiki」。我真的不知道該選項的作用。 – pauldoo 2009-06-25 11:35:54

+0

............ lol – demoncodemonkey 2009-06-29 15:31:22

回答

11

在您要在發行版中調試的選定文件的頂部使用#pragma optimize("", off)。這提供了更好的堆棧跟蹤/變量視圖。

如果只有幾個文件需要追蹤該錯誤,那麼它可以很好地工作。

3

簡介應用程序,看看花時間。你應該能夠看到需要調試的調試信息。

1

調試版本和發佈版本之間有幾點不同,它們影響可調試性和速度。最重要的是_DEBUG/NDEBUG定義,編譯器優化和創建調試信息。

您可能想創建第三個解決方案配置並使用這些設置進行操作。例如,將調試信息添加到發佈版本並不會真的降低性能,但您已經獲得了明智的堆棧跟蹤,因此您知道自己在使用哪個函數。由於編譯器優化,只有行信息不可靠。

如果您需要可靠的線路信息,請繼續並關閉優化。這會稍微減慢執行速度,但只要_DEBUG定義尚未設置,這仍會比正常調試更快。然後你可以做很好的調試,只有那些「#ifdef _DEBUG」或類似的東西纔會出現(例如調用assert等)。

希望這有助於

0

你在使用哪個VS?我們最近從VS.net移到了VS2008,而在500k LOC項目上調試高端機器時,我也經歷了同樣的緩慢。事實證明,Intellisense基地遭到了破壞,並會不斷更新自己,但會陷入某個地方。刪除.ncb文件解決了問題。

1

你使用MFC嗎?

根據我的經驗,可以使調試版本變慢的主要原因是類驗證例程,它通常在發行版中禁用。如果數據結構完全像樹一樣,則最終可能會重新驗證子樹數百次。不管如何,比如說,比發佈版本慢10倍,這意味着它花費1/10的時間來做必要的事情,而9/10做其他事情。如果在你等待它的時候,你只需點擊「暫停」按鈕並查看調用堆棧,那麼很可能你會看到問題所在。

It's a quick & dirty, but effective way to find performance problems.

4

我們關閉迭代器的調試與預處理符號:

_HAS_ITERATOR_DEBUGGING=0 
_SCL_SECURE=0 

它幫助了一點,但還是沒有那麼快,因爲我們想。我們最終還是通過定義NDEBUG而不是_DEBUG來讓我們的調試版本更像版本發佈。還有一些其他選項我們也改變了,但我不記得它們。

不幸的是,我們需要做所有這些,但是我們的應用程序每50ms需要完成一定量的工作或者它不可用。開箱VS2008會給我們60ms的調試時間和約6ms的時間釋放。通過上面提到的調整,我們可以將調試降低到約20ms左右,至少可以使用。

2

創建ReleaseWithSymbols配置,定義NDEBUG並沒有啓用任何的優化。這將爲您提供更好的性能,同時保持準確的調試符號。

相關問題