2012-05-25 55 views
2

我通常使用Qt Creator來滿足我的C++需求。當我程序中的斷言失敗時,它可以告訴我哪個斷言失敗了。在Visual Studio中,我只看到這一點:Visual Studio可以告訴我哪個斷言失敗了嗎?

Failed assertion

我可以點擊重試跳進應用程序,但它並沒有告訴我哪個斷言失敗。即使對於簡單的assert(false) Visual Studio也會嘗試向我顯示msvcr100d.dll的源代碼,該代碼不可用。

如何找出程序中的哪個斷言失敗?我真的不想使用斷點和std::cout s的組合進行繁瑣的手動搜索,以查找可以自動追蹤的內容。

編輯:Visual Studio確實爲我生成了一個.PDB文件,但它仍然無法正常工作。雖然調試器不會突出顯示斷言失敗的行,但我確實在命令行上看到斷言失敗:false,文件main.cpp,第8行。爲什麼不能讓我看看這條線,讓我檢查一下變量?我的意思是,所有的信息似乎都是可用的...

+0

請參閱http://stackoverflow.com/q/2108000/11343 – CharlesB

+1

@CharlesB這個問題有其他解決方法。 –

回答

5

所有你應該做的就是點擊「重試」,用調試器闖入應用程序的源代碼。這將突出顯示包含斷言失敗的行,因此很容易看到罪魁禍首,除非您想將多個嵌套斷言嵌入單行。如果你這樣做,那麼你應該得到這可能給你帶來的所有痛苦。

它現在不能爲你工作的原因很可能是因爲你的應用程序的當前版本沒有可用的調試符號。當您使用Visual Studio捆綁的編譯器構建應用程序時,根據您的項目設置,它將生成一個.PDB文件,其中包含調試符號。這些都是在調試時獲得有用的信息所必需的,比如哪一行產生了最後一次失敗。

確保在編譯您的應用程序時,將其設置爲生成調試符號。您應該在/ bin目錄中看到一個.PDB文件。 As discussed here,調試符號的生成與是否啓用優化(該配置通常稱爲「發佈」)是正交的。

更新:我剛剛意識到你可能在Qt Creator中編譯/構建應用程序,然後嘗試從Visual Studio調試二進制文件。這並不會奏效 - 如果您不使用VS的工具進行編譯,則不會生成VS調試器可以讀取的調試符號。

我認爲問題會相反:如果使用Visual Studio構建,然後嘗試使用Qt Creator進行調試,則可能無法解釋調試符號。

因此,我建議堅持使用一個單一的工具組來建設。使用哪個IDE並不重要,但是您需要使用相同的工具進行編譯/構建。您可以配置Qt Creator或Visual Studio以使用與其他版本捆綁的編譯器和鏈接器。通常Qt Creator附帶了一個GCC的Win32端口,但使用微軟的工具集來構建它是微不足道的,它可以讓你使用VS來調試你的代碼。

+0

這就是執行'assert(false)'後的「Retry」:http:// i。imgur.com/w1zFL.png我不明白這有什麼幫助。不能Visual Studio突出顯示我的斷言失敗像Qt Creator那樣的行嗎? – Pieter

+0

@Pieter是的,這就是我的答案。錯誤信息如下:*「No Source Available:沒有任何符號被加載用於任何調用堆棧幀。[因此,]源代碼不能顯示」*。您可以通過生成調試符號來修復該問題,以便VS調試器可以找到它們。推測你在Qt Creator中的設置會導致默認情況下發生這種情況,但是你已經配置了VS * not *來生成調試信息。您需要更改這些設置。一旦你這樣做,VS就會像Qt Creator一樣行事。我經常用這個。 –

+0

對不起,我首先想到你正在討論獲取DLL的調試符號。順便說一下,我沒有嘗試在Qt Creator中打開這個Visual Studio項目。我已經啓用[this](http://i.imgur.com/fSrxK.png)設置,但它不能解決我的問題。我錯過了什麼?谷歌搜索* visual studio 2010生成調試符號*沒有返回任何我可以使用的。 – Pieter

相關問題