Информация о типе C ++ от VS2008 - PullRequest
3 голосов
/ 30 апреля 2009

Можно ли заставить Visual Studio выводить какую-либо информацию о типе при компиляции C ++? GCC имеет GCC-XML, и мне было интересно, что-то подобное было для VS2008.

Спасибо

BEN

1 Ответ

2 голосов
/ 04 мая 2009

Существует несколько решений этой проблемы;

  1. есть, конечно, документация XML.
  2. Вы можете включить вывод приписанного источника в «C / C ++» -> «Выходные файлы», «Расширить источник атрибутов», а также различные уровни списков вывода ассемблера.

    К сожалению, эти методы довольно трудоемки и неструктурированы (то есть взлом синтаксиса вручную).

  3. RTTI включен по умолчанию для всех проектов C / C ++. Так как он является предвестником рефлексии C #, вы можете использовать его для очень хорошего извлечения структурированной и точной информации.
  4. Имя искажения, может присутствовать, даже если RTTI недоступен. Двоичные файлы C ++ могут полагаться на эту упакованную формулировку замедления исходного кода, чтобы включить функцию полиморфизма во время выполнения или другую функцию oo'ness templeate'd;). В любом случае, даже если искажение имен недостаточно документировано, в отладочном SDK существует API-вызов, а на самом деле даже в Windows Win32 APi, который «декорирует» искаженное представление для вас. Тогда вам, возможно, все же придется преобразовать необработанный формат, в любом случае, в этот момент он довольно тривиален.
  5. Файлы PDB, вы можете использовать DIA SDK для опроса PDB, которые вы скомпилировали. В информации, содержащейся в PDB, есть несколько уровней многословия (публичный или частный), но обычно этого более чем достаточно.
  6. Посмотрите на компилятор нового поколения Phoenix от MSR, он обладает впечатляющими интроспективными возможностями двоичного кода / источника.
  7. CodeDom, вы можете использовать библиотеки MSVC SDK и библиотеки домен-специфических языков (DSL) для довольно простого написания собственного анализатора кода.
  8. На самом деле в MSVC есть несколько других API автоматизации и не-DSL, которые вы можете использовать для достижения чего-то, возможно, не такого всеобъемлющего, но это зависит от ваших потребностей. Во всяком случае, большинство примеров и информации, которую вы можете найти об этих других API, будут написаны на бейсике, поэтому, если вы не знаете VB (я действительно становлюсь тупым всякий раз, когда мне приходится смотреть на код VB), ваша работа может отличаться.
  9. Я мог бы продолжить ....;) но я в порядке с 9.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...