2017-03-28 28 views
1

當我通過以下程序與Visual Studio調試器單步執行操作時,任何istringstream方法調用都不會在「自動」窗口中顯示返回值。不顯示返回值的Visual C++調試器

雖然它顯示了vector::size()的返回值。

#include "stdafx.h" 
#include <sstream> 
#include <vector> 

int main() 
{ 
    std::vector<char>{}.size();  //<-- debugger shows return value 
    std::istringstream{"x"}.get(); //<-- no return value shown 
    std::istringstream{"x"}.good(); //<-- no return value shown 
    std::istringstream{"x"}.tellg(); //<-- no return value shown 
    return 0; 
} 

當然,我在「調試」配置中運行它,所以編譯器不應該能夠優化調用。我之後使用控制檯應用程序嚮導創建項目,而不更改任何項目設置。

我應該提交一個錯誤嗎?

編輯:

另一個可能相關的問題:我不能F11 - 工序到任何上述istringstream方法。調試器只是按下F10,就好像我按了F10一樣。再次,它適用於vector::size()

+0

這聽起來更像是Visual Studio的錯誤報告,而不是正確的代碼問題。 – TankorSmash

+1

我在「Autos」窗口中獲得所有這些調用的返回值。是的,VS2017。 – AnT

+1

@Tankor SO不僅適用於代碼問題,它還適用於[詢問編碼工具](http://stackoverflow.com/help/on-topic)。我不確定,如果這實際上是一個錯誤,或者如果它是一個配置問題。我希望有人先確認一下。 – zett42

回答

0

事實證明,當動態鏈接到VC++運行時時,這是一個缺失調試符號的問題。例如,Visual Studio 2017的默認安裝後,VC++運行時的調試符號不可用。

可能的解決方案:

  • 靜態鏈接到VC++運行時(項目屬性> C/C++>代碼生成>運行時庫:多線程,調試)
  • 啓用Microsoft符號服務器(其他>選項>調試>符號>檢查「Microsoft Symbol Server」並進入下面編輯控件中用於存儲符號的目錄)

我認爲這個問題沒有發生在std::vector,因爲它只是標題,所以代碼直接鏈接到程序可執行文件中。對於C++流庫,大部分代碼實際上都在VC運行時DLL中。

+0

很高興知道這個問題已經解決,您可以將其標記爲答案。感謝您的分享。 –

+0

@Jack我還需要等14小時才能接受我自己的答案。 – zett42

相關問題