提问者:小点点

调试时是否可以将局部变量显示为特定的结构/数据类型?


我正在调试一个具有符号的程序,并且试图从WinDbg控制台检查给定变量-data中的值是什么。

data的声明如下:std::vector<;unsigned char>;data;,但我知道它包含一个结构,让我们将其称为my_struct

有没有任何简单的方法来显示存储在data中的值,就像它被初始化为my_struct数据类型一样?

在我的例子中,my_struct是一个长而复杂的结构,我无法仅通过查看:dv data的输出来理解它。

谢谢。


共2个答案

匿名用户

在搜索了文档并尝试了一些方法之后,我找到了两种可能的解决方案:

首先使用dt命令:

dt -a <ADDRESS_OF_DATA> MY_STRUCT

第二种选择:

dt MY_STRUCT <ADDRESS_OF_DATA>

匿名用户

我使用结构my_structmemcpy()创建了一个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

当然,这是对内部的访问,对于其他编译器和/或其他调试器来说肯定是不同的。

相关问题