autoexp.dat没有解析union?

时间:2010-07-16 10:04:10

标签: c++ debugging visual-studio-2005

我有一个就地定义的矢量类,如下所示:

template<class T>
class svectorbase
{
    // ...
protected:
    union 
    {
        char* m_char;
        T* m_t;
    } m_elems;
    size_t m_maxsize;
    int m_elemCount;
};

template<class T, size_t maxsize>
class svector : public svectorbase<T>
{
protected:
    char m_elems[sizeof(T) * maxsize]; // gets passed to base class
};

(不要问为什么他们不只是创造一个T m_array[maxsize] ......叹息)

我正在尝试在VS2005中为它创建一个autoexp.dat条目,因为该结构使得在调试器中很难查看。我到目前为止:

svector<*>{
    preview 
    (
        #("size=",$e.m_elemCount,"/",$e.m_maxsize)
    )
    children
    (
        #array
        (
            expr : ($c.m_elems.m_t)[$i],
            size : $c.m_elemCount
        )
    )
}

...但是当size属性正确显示时,数组中会填充(error):0条目。

我可能正在做与工会有关的明显事情,但看不到树木的福雷斯特。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

你的基类中有一个名为m_elems的成员变量,派生类中有一个名为m_elems的成员变量。

$c.m_elems中的$c.m_elems.m_t引用派生类的char数组,而不是基类的联合。

答案 1 :(得分:2)

您可以尝试将m_t明确地转换为T *:

children
(
    #array
    (
        expr : ((($T1*)($c.m_elems.m_t))[$i],
        size : $c.m_elemCount
    )
)

我现在不在dev计算机附近,所以这里可能存在语法错误 - 但希望它可以解决这个问题。