Распечатать цепочку создания экземпляров
Я отлаживаю синтаксический анализатор C++ с контейнерами STL C++0x (набор инструментов - GCC 4.7.0).
И поскольку код перепривязки STL трудно понять, мне нужно как-то напечатать полную цепочку инстанциаций для typedef, например std::vector<T>::reference
, Конечно, это решает только T&
, но до того, как он пройдет как минимум 7 различных шаблонов в __gnu_cxx
и другие внутренние органы.
Поэтому я ожидаю что-то вроде того, что печатается в случае ошибок шаблона, но для каждого класса, создаваемого компилятором. Является ли это возможным? Плагины GCC, может быть...
UPD: Ну, я создал все необходимые шаблоны вручную. Кажется, нет хорошего способа сделать это автоматически, кроме вставки некоторых отладочных операторов printf в сам код GCC.
1 ответ
Поскольку вы используете GCC 4.7, я предполагаю, что вы находитесь в системе, где вы можете запустить clang для своего кода. Сообщения об ошибках Clang, особенно с шаблонами, довольно хороши.
шаблон Пример класса { Пример (const T& t): t_(t) {} T& T_; }; int a; Пример е (а);
выходы:
t.cpp: 8: 14: ошибка: вызов частного конструктора класса "Пример" Пример е (а); ^ t.cpp:3:5: note: неявно объявлено здесь приватным Пример (const T& t): t_(t) {} ^ t.cpp:3:27: ошибка: привязка ссылки на тип 'int' к значению типа 'const int' сбрасывается классификаторы Пример (const T& t): t_(t) {} ^ ~ t.cpp:8:14: note: при создании экземпляра функции-члена 'Example:: Example', запрашиваемой здесь Пример е (а); ^ Сгенерировано 2 ошибки.