【问题标题】:Visual C++ debugger not showing return valueVisual C++ 调试器不显示返回值
【发布时间】:2017-03-28 21:20:18
【问题描述】:

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

它显示了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-step 进入上述任何istringstream 方法。调试器只是跨过它们,就好像我按了 F10 一样。同样,它适用于vector::size()

【问题讨论】:

  • 这听起来更像是 Visual Studio 的错误报告,而不是正确的代码问题。
  • 我在“自动”窗口中获得所有这些调用的返回值。是的,VS2017。
  • @Tankor SO 不仅适用于代码问题,对ask about coding tools 也有效。我还不确定这实际上是一个错误还是配置问题。我希望有人先确认一下。
  • @AnT 你用的是哪个 VS 版本?社区版、专业版、企业版……?
  • @zett42:社区。​​span>

标签: c++ visual-studio visual-studio-debugging debug-symbols


【解决方案1】:

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

可能的解决方案:

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

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

【讨论】:

  • 很高兴知道这个问题已经解决,您可以将其标记为答案。感谢您的分享。
  • @Jack 我仍然需要等待 14 小时才能接受我自己的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多