设定vs调试器的端
Setting endianness of VS debugger
我正在使用VS 2012和C 编程。我有一个宽字符串
wchar_t *str = L"Hello world".
从技术上讲,我从文件中读取字符串,但我不知道这是否有所作为。当我在存储窗口中查看str
时,看起来像这样:
00 48 00 65 00 6c 00 6c 00 6f 00 2c 00 20 00 77 00 6f 00 72 00 6c 00 64 00 21 00
您可以看到字符串存储在内存中,以大端。
当我将鼠标悬停在字符串上时,我会得到:
L"䠀攀氀氀漀Ⰰ 眀漀爀氀搀℀"
我扭转了 str
的末端,内存看起来像:
48 00 65 00 6c 00 6c 00 6f 00 2c 00 20 00 77 00 6f 00 72 00 6c 00 64 00 21 00 00
和悬停的外观如下:
L"Hello, world!"
似乎默认情况下,调试器在Little-endian中显示UTF-16。我的程序读取大型文件,因此不断扭转所有字符串的尼迪亚人来调试它们是非常乏味的。有什么方法可以改变调试器显示器的终点?
除了调试目的外,我可以在大恩迪安(Big Endian)进行所有处理。
不仅是调试器。Visual Studio的WCHAR_T函数像主机一样小。无论如何,当您要处理数据时,您需要将字符串endianess转换为Little Endian。
即使将字符串输出到具有不同的endianess的文件,也值得进行此更改。字符串定义为字节序列,您的endianess应用于字符串看起来很奇怪。
使此功能的最佳镜头是定义自己的类型并为其创建一个调试器类型的可视化器(请参阅自定义数据的Visual Studio调试器显示您的数据,或者在此处)。<<<<<<<<<<<<<<
,或者也许您可以通过在手表窗口中通过1个字节将地址转移来快速浏览它。
您正在使用一种非本地字符串格式,该格式恰好与本机格式相似。因此,您很想认为应该有几乎做到这一点的方法。但是对于调试器来说,这只是一种外国二进制格式。调试器并非旨在处理外国的尼斯尼斯,就像它不处理可视化的OGG流有关。
如果您想使用可用的工具来操纵本机 - 统一字符串,则需要转换为本地 - 末端Unicode格式。
正如所指出的,vs使用本地endianness,在英特尔/AMD上的小末日。问题是你不是正确读取字符串;你应该把 std::istream
带有读取UTF-16BE的语言环境(因为这是显然,您要阅读的编码表格)。 std::istream
(或者是支持std::filebuf
)将阅读时自动进行代码翻译和写作。
您可以使用上下文菜单设置内存窗口的端性。右键单击"内存"窗口并检查"大恩迪安"。
- 正在VS调试器中监视映射条目
- 为什么我的 VS 代码调试器在我的C++代码周围弹跳?
- 带有 GDB 调试器的 VS 代码内存视图
- 为什么调试器引发"read access violation. this was nullptr"异常?
- VS2017调试器:没有地址,可能是由于编译器优化
- 当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联
- 使用 Windows 10 和 MINGW 编译器在 VS Code 上使用 gdb 调试器进行调试时出错
- 如何在可视化代码中生成用于 c++ 开发的调试器?
- 为什么我的程序无法在GDB在线编译器/调试器或Visual Studio C++ 2019中运行
- VS 2015图形调试器给我源错误
- 设定vs调试器的端
- 在 VS 调试器中显示 UTF-16 字符串
- 为什么连VS调试器外启动的程序都不能调用terminate方法呢
- 为什么在VS 2010 C++中,我的程序在调试器中运行良好时会崩溃,但在没有调试器的情况下运行时会崩溃
- VS 2012:调试器:"Break all in 5 seconds"
- 如何在VS调试器中查看c++中动态字符串数组的内容
- 自定义VS C++调试器
- 将常量引用对象作为参数传递时出现问题,VS 调试器报告"'.getXCoord'左侧必须具有调用/结构/联合"
- VS Studio调试器-获取(并观察)一个类型的所有实例
- 代码块(IDE)与调试器从VS