调试器在查看字符串变量时显示npos=4294967295
Debugger shows npos=4294967295 when viewing string variables
我的问题基本上是,每当我使用Visual Studio(Windows 10计算机上的2015社区版)进行调试时,当我试图将鼠标悬停在某个变量上或在调试视图的locals或autos部分查看某个变量时,我看不到变量中保存的实际数据。
这是我在字符串和向量中看到的一个问题。对于字符串,它将显示npos=44294967295
如果你一直点击下拉箭头,你最终会得到保存在该变量中的实际字符串;只有在深入研究变量的内部结构之后,如std::_String_alloc
、_Mypair
和_Myval
等。向量也是如此。
有没有人经历过这个问题,或者知道如何解决它?
我也遇到了同样的问题。我假设您正在调试一个非托管(本机)C++DLL,它是使用托管EXE的解决方案的一部分?在我的例子中,我有一个C#WPF EXE,它PInvoke非托管C++DLL中的函数。
在我的案例中起作用的"修复":
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调试器附加到进程(调试/附加到进程),但只能使用"附加到/选择…"按钮选择"本机代码"。现在,当您的原生C++DLL中的断点被击中时,您可以将鼠标悬停在std::string变量上,VS2015将按预期显示其全部内容,包括其数据成员。这种本机代码只能解决的缺点是,您将无法同时调试托管代码(例如C#或CppCli)。
在项目属性中选择调试->调试器类型->仅限本机。在我的情况下,它是混合
取消选中Debug->options->use native compatibility mode
在尝试了以上所有答案后,我做得很好。
4294967295是0xffffffff
,它是一个32位的字,全部为一位。在大多数机器上,这也是(unsigned)-1
,它是通常的str::npos常数。
顺便说一句,你有没有试过用GCC用g++ -Wall -g
编译你的代码?然后使用gdb
进行调试。
帮助我的是以管理员身份运行Visual Studio(在我的案例中是2010)。否则npos错误仍然会发生,即使我应用了其他所有提出的解决方案。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 从数据库实时显示QT c++中的数据
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 显示错误输出的简单数组排序程序
- Qt自定义QPush按钮未显示在布局上
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 显示基于用户输入的整数的字符
- 使用QTreeView,如何通过调用函数只突出显示特定的行/列
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 字符串显示上的智能感知:npos = 18446744
- 调试器在查看字符串变量时显示npos=4294967295