C++ visual studio调试器-监视指针转换

C++ visual studio调试器-监视指针转换,c++,visual-studio-2010,visual-studio-debugging,C++,Visual Studio 2010,Visual Studio Debugging,我有一些难看的lagacy代码,我试图理解并想要调试 情况: class A{ // some members and functions // but no virtual ones }; class B:public A { // contains virtual methods } class C:public B {} // now somewhere there is an array of pointers to A; A* someList[FixSize]; // and

我有一些难看的lagacy代码,我试图理解并想要调试

情况:

class A{
// some members and functions
// but no virtual ones
};

class B:public A
{
// contains virtual methods
}

class C:public B
{}

// now somewhere there is an array of pointers to A;
A* someList[FixSize];

// and another struct contains a pointer to that someList.
struct T{
 A** list;
}t;
someList
的数组元素实际上是
C
类型。由于
A
不包含任何虚拟方法,因此调试器仅在该列表中显示A元素,而不在其树视图中提供子类成员

list
指针投射到
C**
显然不起作用,因为
C
-对象与其
A
部分之间存在偏移

如果将
(C*)(t->list[0])
设置为监视,则调试器将显示正确的数据。但是用这种方法检查50个物体不是很方便

有谁知道一些聪明的方法来处理这个问题。

(C**)t->list,10
正在Visual Studio 2010中测试。
根据您的
struct{}T
定义,它应该是
(C**)(T.list),10

Try
(C*)(T->list[0]),FixSize
。您可能需要使用实际数字,而不是
FixSize
。请参见@Simple,只有当对象在内存中的顺序与列表中的顺序相同时,此操作才有效。事实并非如此。如果您使用的是新版本的VS(ex:2013),您可以使用调试器可视化工具(并为自定义类型制作一个,此可视化工具可以在同事之间共享,以便向其他人解决此问题)。是否允许您向调试器添加虚拟析构函数?如果你能做到这一点,那么(C**)t->list,50就行了。@cup遗憾的是,我不能添加任何虚拟方法,因为这会破坏依赖于A:-(-很难解释,但简而言之:否)内部结构的一些代码