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

问题描述 投票:11回答:5

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

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

如果你一直点击下拉箭头,你最终会得到保存在该变量中的实际字符串;只有在挖掘变量的内部结构之后,如std::_String_alloc_Mypair以及_Myval等。矢量相同。

有没有人遇到这个问题或知道如何解决它?

c++ visual-studio debugging visual-studio-2015
5个回答
7
投票

我有同样的问题。我假设您正在调试一个非托管(本机)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)。


1
投票

在项目属性中,选择Debugging-> Debugger Type-> Native Only。就我而言,它是混合的


1
投票

取消选中Debug->options->use native compatibility mode在尝试了以上所有答案后,我的工作得很好。


0
投票

4294967295是0xffffffff,它是一个32位字,全部为一位。在大多数机器上,这也是(unsigned)-1,这是通常的str::npos常数。

顺便说一下,您是否尝试使用GCC使用g++ -Wall -g编译代码?然后使用gdb进行调试。


0
投票

帮助我的是以管理员身份运行Visual Studio(在我的情况下为2010)。即使我应用了所有其他提议的解决方案,npos-bug仍然会出现。

© www.soinside.com 2019 - 2024. All rights reserved.