查看字符串变量时,调试器显示npos = 4294967295

时间:2015-11-10 16:39:07

标签: c++ visual-studio debugging visual-studio-2015

我的问题基本上是每当我使用Visual Studio(在Windows 10机器上的2015社区版)上调试时,我尝试将鼠标悬停在变量上或查看调试视图的locals或autos部分中的变量,我不会#39; t看到保存在变量中的实际数据。

这是我用字符串和向量看到的问题。对于字符串,它将显示 npos = 4294967295

如果你继续点击下拉箭头,你最终会得到保存在该变量中的实际字符串;只有在深入研究变量的内部结构之后,例如std::_String_alloc_Mypair以及_Myval,等等。

有没有人遇到过这个问题或知道如何修复它?

5 个答案:

答案 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仍然会出现。