Visual C++ 调试器未显示 return 值

Visual C++ debugger not showing return value

当我通过以下程序单步执行 Visual Studio 调试器时,任何 istringstream 方法调用。

不过它显示了 vector::size() 的 return 值。

#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;
}

当然我运行这个在"debug"配置中,所以编译器不应该能够优化调用。我使用控制台应用程序向导创建了项目,之后没有更改任何项目设置。

我应该提交错误吗?

编辑:

另一个可能相关的问题:我无法 F11-进入上述任何 istringstream 方法。调试器只是跨过它们,就好像我按下了 F10 一样。同样,它适用于 vector::size().

事实证明,这是动态 linking 到 VC++ 运行时时缺少 调试符号 的问题。例如,在默认安装 Visual Studio 2017 后,VC++ 运行时的调试符号不可用。

可能的解决方案:

  • 静态 link 到 VC++ 运行时(项目属性 > C/C++ > 代码生成 > 运行时库:Multithreaded-Debug)
  • 启用 Microsoft 符号服务器(Extras > Options > Debugging > Symbols > 检查 "Microsoft Symbol Server" 并在下面的编辑控件中输入用于存储符号的目录)

我认为 std::vector 没有出现问题,因为它是 header-only,所以代码直接 link 编辑到程序可执行文件中。对于 C++ 流库,大部分代码实际上都在 VC 运行时 DLL 中。