在调试器中查看大多数派生类型 我正在编写一个C++项目,并构建一个各种继承相关类型的DAG。我在构建之后放置了一个断点,我想查看DAG。然而,调试器将只显示基类。它会在\uu vfptr条目旁边命名最派生的类型,但我无法实际查看它的内容并验证它们是否是我所期望的。有没有办法直接在“局部变量”窗口中查看最派生的类型

在调试器中查看大多数派生类型 我正在编写一个C++项目,并构建一个各种继承相关类型的DAG。我在构建之后放置了一个断点,我想查看DAG。然而,调试器将只显示基类。它会在\uu vfptr条目旁边命名最派生的类型,但我无法实际查看它的内容并验证它们是否是我所期望的。有没有办法直接在“局部变量”窗口中查看最派生的类型,c++,visual-studio-2010,C++,Visual Studio 2010,我的目标是x64,如果相关的话。唯一对我有效的方法是告诉调试器在autoexp.dat的帮助下正确显示对象。不确定它在vs2010中的效果如何,我仍然使用2008。这种方法非常适合智能指针。如果您试图查看原始指针,那么,我想,您需要在watch/quick watch窗口中手动转换指针。如果它是某种smartpointer或存储原始基指针的类,那么您可以用autoexp.dat以这种方式简单地完成它(假设您的基ptr被称为m_ptr): smart\u ptr{ 预览 ( #如果($e.m_pt

我的目标是x64,如果相关的话。

唯一对我有效的方法是告诉调试器在autoexp.dat的帮助下正确显示对象。不确定它在vs2010中的效果如何,我仍然使用2008。这种方法非常适合智能指针。如果您试图查看原始指针,那么,我想,您需要在watch/quick watch窗口中手动转换指针。如果它是某种smartpointer或存储原始基指针的类,那么您可以用autoexp.dat以这种方式简单地完成它(假设您的基ptr被称为m_ptr):

smart\u ptr{
预览
(
#如果($e.m_ptr)!=0)
(
#(
“智能ptr”,
(*($T1*)$e.m_ptr))
)
)
#否则
(
#("")
)
)
儿童
(
#(
ptr:(*($T1*)$e.m\U ptr))
)
)

}/P>调试器只能猜测实际类型,C++不支持反射。使用强制转换表达式:(foo)ptr@Hans:调试器知道确切的类型。除了我可能进行的任何理论论证外,它还可以在调试器中准确地命名类型。它清楚地显示了

\uu vfptr(大多数派生类型)
。我只是不能探究这个值。它知道v表指针的确切类型,它可以从它的值中分辨出来。它不知道包含该指针的对象的类型。你试过这个角色吗(它被咬了,
*(foo*)ptr
)我不是在找包含指针的对象,只是指针指向的对象。我可以使用cast,但因为我们讨论的对象超过100个,所以根本不可行。它指向班级的v形桌。指向类的虚拟方法的函数指针数组。它不会帮你调试任何东西,你走错了方向。
smart_ptr<*>{
preview
(
    #if (($e.m_ptr)!=0)
    (
    #(
        "smart_ptr ",
        (*(($T1 *)$e.m_ptr))
    )
    )
    #else
    (
        #("<Bad Ptr>")
    )
)
children
(
    #(
        ptr: (*(($T1 *)$e.m_ptr))
    )
)