【发布时间】:2012-05-10 22:10:48
【问题描述】:
我正在使用 STL C++0x 容器调试一些 C++ 解析器(工具链是 GCC 4.7.0)。
而且由于 STL 重新绑定代码很难理解,我需要以某种方式打印类型定义的完整实例化链,例如 std::vector<T>::reference。当然,它只解析为T&,但在经过__gnu_cxx 和其他内部结构中的至少7 个不同模板之前。
所以我期待在出现模板错误的情况下打印的内容,但是对于编译器实例化的 every 类。 可能吗? GCC 插件,也许...
UPD:嗯,我已经手动实例化了所有需要的模板。似乎没有什么好的方法可以自动执行此操作,除了在 GCC 代码本身中插入一些调试 printf 语句。
【问题讨论】:
-
你试过STLFilt:bdsoft.com/tools/stlfilt.html>吗?尽管最初是为了帮助您解决与模板实例化相关的错误而开发的(并且在“概念”之前——尽管它们还没有作为标准的一部分),但它可能值得您花时间。我不认为他们有 C++11 特定的变化,因为积极的开发停止了一段时间。否则,您将不得不编写自己的各种模板编译器。
-
您是否从源代码构建 GCC?我似乎记得很多调试转储选项,您可能能够获得每个模板实例化的状态消息。不过,它可能涉及绕过驱动程序。
标签: c++ debugging instantiation typename