使用 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 << __PRETTY_FUNCTION__ << std::endl;
@PiotrSkotnicki __PRETTY_FUNCTION__
是一个 gcc 扩展
如果你依赖std::cout
,不如使用std::cout << typeid(x).name()
。这没有抓住重点。
【参考方案1】:
只需将x
本身添加到监视列表即可。监视窗口的第三列将列出x
的实际类型,即用于实例化foo<T>
的T
【讨论】:
哇!我没有看到那个专栏!它一直在我的屏幕之外,我不得不水平滚动。发现了新功能。 咳咳!类型栏为空...i.imgur.com/n64489K.png @superdeveloper:嗯,变量x
必须存在,这意味着您需要在x
范围内的某处打断点。如果没有foo
的实例正在执行,则不存在x
。
我可以通过查看程序集来推断类型。对于任何好奇的人,它是 Alt+8。我仍然会接受这个答案。至于为什么类型列是空的,我不知道 - 我能够看到该值。以上是关于使用 MSVC 调试类型的主要内容,如果未能解决你的问题,请参考以下文章
在调试(c ++ MSVC)中提高flatbuffer性能的任何方法