我的问题基本上是每当我使用Visual Studio(在Windows 10机器上的2015社区版)上调试时,我尝试将鼠标悬停在变量上或查看调试视图的locals或autos部分中的变量,我不会#39; t看到保存在变量中的实际数据。
这是我用字符串和向量看到的问题。对于字符串,它将显示 npos = 4294967295
如果你继续点击下拉箭头,你最终会得到保存在该变量中的实际字符串;只有在深入研究变量的内部结构之后,例如std::_String_alloc
和_Mypair
以及_Myval
,等等。
有没有人遇到过这个问题或知道如何修复它?
答案 0 :(得分:7)
我遇到了同样的问题。我假设您正在调试一个非托管(本机)C ++ DLL,它是使用托管EXE的解决方案的一部分?在我的例子中,我有一个C#WPF EXE,它在非托管C ++ DLL中使用PInvokes函数。
“修复”在我的案例中起作用:
FIX 1:在调试器设置中取消选中“使用托管兼容模式”: 您可以在Tools / Options / Debugging / General中执行此操作。请参阅: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”并使用“Attach”到/选择...“按钮。现在,当您的本机C ++ DLL中出现断点时,您可以将鼠标悬停在std :: string变量上,VS2015将按预期显示其完整内容,包括其数据成员。这种纯本地代码解决方法的缺点是您无法同时调试托管代码(例如C#或CppCli)。
答案 1 :(得分:1)
在项目属性中选择 调试 - >调试器类型 - >仅限本机。就我而言,它是混合
答案 2 :(得分:1)
取消选中Debug->options->use native compatibility mode
,在尝试了上述所有答案后,我的工作效果很好。
答案 3 :(得分:0)
4294967295是0xffffffff
,它是一个32位字,全部为一位。在大多数机器上,这也是(unsigned)-1
常用的str::npos常量。
BTW,您是否尝试使用GCC使用g++ -Wall -g
编译代码?然后使用gdb
进行调试。
答案 4 :(得分:0)
帮助我的是以管理员身份运行Visual Studio(在我的情况下为2010)。即使我应用了所有其他提出的解决方案,npos-bug仍然会出现。