我正在调试一个具有符号的程序,并且试图从WinDbg控制台检查给定变量-data
中的值是什么。
data
的声明如下:std::vector<;unsigned char>;data;
,但我知道它包含一个结构,让我们将其称为my_struct
。
有没有任何简单的方法来显示存储在data
中的值,就像它被初始化为my_struct
数据类型一样?
在我的例子中,my_struct
是一个长而复杂的结构,我无法仅通过查看:dv data
的输出来理解它。
谢谢。
在搜索了文档并尝试了一些方法之后,我找到了两种可能的解决方案:
首先使用dt
命令:
dt -a <ADDRESS_OF_DATA> MY_STRUCT
第二种选择:
dt MY_STRUCT <ADDRESS_OF_DATA>
我使用结构my_struct
memcpy()
创建了一个MCVE,该MCVE将std::vector
:
#include <iomanip>
#include <iostream>
#include <vector>
struct MY_STRUCT {
int a = 123;
double b = 1.23;
char c[20] = "Hello World.";
};
int main()
{
MY_STRUCT obj;
std::vector<uint8_t> data;
data.resize(sizeof obj);
std::memcpy(data.data(), &obj, sizeof obj);
for (unsigned byte : data) {
std::cout << ' ' << std::hex << std::setw(2) << std::setfill('0') << byte;
}
std::cout << '\n';
}
并添加了一个特定的监视表达式来从std::vector
中提取原始数据,然后用C指针转换回其“原始”含义:
为了强调我使用的手表表达式:
(MY_STRUCT*)data._Mypair._Myval2._Myfirst
当然,这是对内部的访问,对于其他编译器和/或其他调试器来说肯定是不同的。