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 中。
当我通过以下程序单步执行 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 中。