我的问题基本上是每当我使用Visual Studio(在Windows 10机器上的2015社区版)上调试时,我尝试将鼠标悬停在变量上或查看调试视图的locals或autos部分中的变量,我看不到保存在变量中的实际数据。
这是我用字符串和向量看到的问题。对于字符串,它将显示npos = 4294967295
如果你一直点击下拉箭头,你最终会得到保存在该变量中的实际字符串;只有在挖掘变量的内部结构之后,如std::_String_alloc
和_Mypair
以及_Myval
等。矢量相同。
有没有人遇到这个问题或知道如何解决它?
我有同样的问题。我假设您正在调试一个非托管(本机)C ++ DLL,它是使用托管EXE的解决方案的一部分?在我的例子中,我有一个C#WPF EXE,它在非托管C ++ DLL中使用PInvokes函数。
在我的案例中有效的“修复”:
FIX 1:在调试器设置中取消选中“使用托管兼容模式”:您可以在工具/选项/调试/常规中执行此操作。请参阅:https://stackoverflow.com/a/33462362/5556801有关“托管兼容性模式”的内容以及您通常不希望它取消选中的原因的一些讨论,请参阅:http://blogs.msdn.com/b/visualstudioalm/archive/2013/10/16/switching-to-managed-compatibility-mode-in-visual-studio-2013.aspx
“FIX”2:作为部分解决方法,您可以先不使用调试器(Ctrl + F5)启动流程,然后将VS2015调试器连接到您的流程(Debug / Attach-to-Process),但只选择“Native code” “使用”附加到/选择...“按钮。现在,当您的本机C ++ DLL中出现断点时,您可以将鼠标悬停在std :: string变量上,VS2015将按预期显示其完整内容,包括其数据成员。这种仅限本机代码的解决方法的缺点是您无法同时调试托管代码(例如C#或CppCli)。
在项目属性中,选择Debugging-> Debugger Type-> Native Only。就我而言,它是混合的
取消选中Debug->options->use native compatibility mode
在尝试了以上所有答案后,我的工作得很好。
帮助我的是以管理员身份运行Visual Studio(在我的情况下为2010)。即使我应用了所有其他提议的解决方案,npos-bug仍然会出现。