使用 MSVC 调试类型

Posted

技术标签:

【中文标题】使用 MSVC 调试类型【英文标题】:Debugging types with MSVC 【发布时间】:2020-06-26 08:49:33 【问题描述】:

考虑以下代码:

template<class T>
void foo()

    T x;

调试时如何找到 x 的类型?关注列表中添加typeid(x).name()无效。

人们通常如何调试模板元编程?

【问题讨论】:

std::cout &lt;&lt; __PRETTY_FUNCTION__ &lt;&lt; std::endl; @PiotrSkotnicki __PRETTY_FUNCTION__ 是一个 gcc 扩展 如果你依赖std::cout,不如使用std::cout &lt;&lt; typeid(x).name()。这没有抓住重点。 【参考方案1】:

只需将x 本身添加到监视列表即可。监视窗口的第三列将列出x的实际类型,即用于实例化foo&lt;T&gt;T

【讨论】:

哇!我没有看到那个专栏!它一直在我的屏幕之外,我不得不水平滚动。发现了新功能。 咳咳!类型栏为空...i.imgur.com/n64489K.png @superdeveloper:嗯,变量x 必须存在,这意味着您需要在x 范围内的某处打断点。如果没有foo 的实例正在执行,则不存在x 我可以通过查看程序集来推断类型。对于任何好奇的人,它是 Alt+8。我仍然会接受这个答案。至于为什么类型列是空的,我不知道 - 我能够看到该值。

以上是关于使用 MSVC 调试类型的主要内容,如果未能解决你的问题,请参考以下文章

在调试(c ++ MSVC)中提高flatbuffer性能的任何方法

Qt Creator 安装SDK,在MSVC编译模式下使用CDB调试器

与 MSVC++ 2010 编译器一起使用的调试器

MSVC 2008,调试过程,无法调试

调试信息是不是显示 C++/MSVC 中的代码?

std::visit 和 MSVC 调试器的堆栈损坏“重载”结构