可视化C++调试器未显示返回值



当我通过以下程序单步使用 Visual Studio 调试器时,任何istringstream方法调用的"auto"窗口中都不会显示任何返回值。

它显示了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 一样。同样,它适用于vector::size().

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

可能的解决方案:

  • 静态链接到 VC++ 运行时(项目属性> C/C++> 代码生成>运行时库:多线程调试(
  • 启用Microsoft符号服务器(附加>选项>调试>符号>选中"Microsoft符号服务器"并在下面的编辑控件中输入用于存储符号的目录(

我认为std::vector没有发生该问题,因为它是仅标头的,因此代码直接链接到程序可执行文件中。对于C++流库,大部分代码实际上位于 VC 运行时 DLL 中。

最新更新