【问题标题】:does cdb/windbg have an equivalent to autoexp.dat?cdb/windbg 是否与 autoexp.dat 等效?
【发布时间】:2009-06-30 00:58:32
【问题描述】:

我想使用“dt”或“??”更改某些类型的显示方式以类似于使用 autoexp.dat 执行此操作的方式。有没有办法做到这一点?

例如,我有一个类似这样的结构:


struct Foo
{
    union Bar
    {
       int a;
       void *p;
    } b;
};

我有几百个这样的数组,我知道所有这些都指向一个结构 Bar。有没有办法告诉 cdb,无论如何,在这个表达式中,'p' 是指向 Bar 的指针?这是你可以用 autoexp 做的事情。 (这里的具体例子是我有一个可以有任何类型键的 stashtable,但我知道它们的键是字符串。实现将它们存储为 void 指针)。

提前致谢!

【问题讨论】:

    标签: c++ c visual-studio windbg cdb


    【解决方案1】:

    我认为没有像 autoexp.dat 这样简单的东西。

    您有几个可能的选择 - 您可以使用调试器命令编写一个简单的脚本文件,以您想要的方式转储数据结构,并使用“$<filename”命令(或其变体之一)。结合用户别名,您可以使其使用起来非常简单自然。

    第二个选项涉及更多,但功能更强大 - 编写一个转储数据结构的扩展 DLL。对于像你所说的那样的事情,这可能是矫枉过正。但是您拥有调试器扩展的强大功能(事实上,调试工具包中的大部分功能都是通过这种方式实现的)。 SDK 与调试器一起打包,因此很容易确定这是否是您可能需要的。

    【讨论】:

      【解决方案2】:

      您可以说dudadump memory 设为unicode 或ascii 字符串。

      【讨论】:

      • 如果我有一个数组,它的元素指向内存中其他位置的字符串,我可以在该指针的地址上调用“da”作为打印数组的一部分吗?
      • 如果知道数组的起始地址,应该可以计算出起始地址到你想要的元素的偏移量(sizeof(struct) * i)然后加上(DWORD 对齐)结构内的元素。您还可以对结构的地址执行 dt -r 以让调试器递归地转储所有成员。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 2014-12-19
      • 2021-04-30
      相关资源
      最近更新 更多