2012-04-19 2 views
4

Недавно я хотел внести вклад в проект C++ с открытым исходным кодом. Только имея небольшой опыт работы с C++, я выбрал Visual Studio как IDE, обновленную с пакетом обновления 1. Я получил решение для создания относительно легко и хотел немного ориентироваться в коде, чтобы получить обзор.«Перейти к определению»/«Перейти к декларации» не работает надежно в VS2010?

Это когда я заметил, что иногда «Перейти к определению»/«Перейти к декларации» не работает. Оба варианта доступны, когда я нажимаю правой кнопкой мыши на символ в исходном коде, но когда я вхожу в заголовочный файл, «Перейти к определению» возвращает меня снова в декларацию для тех функций, которые касаются. И когда я в файле .cc, я всегда получаю определение в том же файле.

еще несколько вещей, которые я заметил о функциях, которые обеспокоенное этого является:

1) для некоторых функций, можно перейти к определению из заголовка файла, но в другом направлении нарушается

2) Навигация для некоторых функций может быть исправлен, если декларация изменена, чтобы полностью соответствовать определению, например

header declaration: 
    void buche(sint64 betrag, player_cost type); 
source definition: 
    void karte_t::buche(sint64 const betrag, player_cost const type) 

изменения

header declaration: 
    void buche(sint64 const betrag, player_cost const type); 

-> навигация работает в обоих направлениях

3) при нажатии кнопки в блок коды заинтересованной функции в исходном файле, в меню области видимости в верхнем изменения в «(Глобальный масштаб)» вместо того, чтобы показывать маленькую стрелку вправо (что является символом для прямого объявления, которое я думаю?) и имя класса (но эти функции, безусловно, являются членами класса)

Я много искал, и это кажется довольно известной проблемой. На сайте есть тема: How to get IntelliSense to reliably work in Visual Studio 2008

Я также нашел несколько тем на форумах Microsoft (которые я не могу связать, поскольку мне разрешено публиковать две гиперссылки), но официального подтверждения ошибки или чего-то еще ,

Квинтэссенция ответов, которые я нашел, заключается в том, что следует удалить файл .ncb (который был заменен .sdf-базой данных в VS2010, насколько я понял), или использовать параметр для восстановления базы данных при загрузке решения , Я делал все это несколько раз, но безрезультатно. Самый высокий рейтинг ответа на поток здесь, на Stackoverflow, кажется, подразумевает, что это просто ошибка (из Intellisense - правильно ли я понял, что это компонент автозаполнения, который также отвечает за навигацию кода?), Нужно принять, предлагая вместо этого используйте Visual Assist, однако вопрос был о VS2008, и один ответ указал на улучшение VS2010. Другой ответ обвинил рекурсивные ссылки, но я-думаю - это не проблема в этом проекте, поскольку все файлы (конечно, те немногие, с которыми я проверил и столкнулись с проблемами), включают в себя охранники. Мне также подтвердил один кодер этого проекта, что у него такие же проблемы. Но я не очень заинтересован в том, чтобы тратить деньги на Visual Assist, это всего лишь маленькое хобби ...

Имея большой опыт работы с Eclipse/Java, мне кажется странным, что такой относительно важный функция IDE не работает надежно. Конечно, я могу понять, что статический анализ кода для C++ намного сложнее, чем для Java. Но опять же, Visual Studio - это коммерческий продукт, в котором много циклов разработки.

Итак, чтобы суммировать это сообщение, неужели это неизбежная ошибка?

+0

Статья, которую вы опубликовали: Как получить intellisense для надежной работы в VS 2008, работал для меня. Я закрыл решение VS, удалил SDF-файл решения, повторно открыл решение, перестроил решение и вуаля. – John

ответ

1

Я предполагаю, что это зависит от того, что вы считаете неизбежным.

По моему опыту, проблемы с Intellisense, по-видимому, вызваны главным образом шаблонами, макросами или обоими.

Парсер/препроцессор, который использует Intellisense, похоже, не работает так же, как и компилятор, и в некоторых случаях, вероятно, отсутствует информация и неправильные предположения.

Если вы кодируете и вдруг заметили, что Intellisense сломан, и вы только что добавили довольно сложный класс шаблонов (тот, который использует другие классы шаблонов или который вы экземпляр с другим классом шаблонов или что-то странное) или макрос (опять же, особенно сложные), вы обычно можете предположить, что именно это и вызвало его. Часто, переставляя код, упрощая его или просто произвольно меняя его, вы сможете восстановить Intellisense (часто только после удаления файла .sdf).

Это довольно неудобно, но если это библиотека, которая сломала его, это еще хуже. Некоторые библиотеки Boost, в частности, имеют тенденцию ломать ее довольно часто. В этих случаях этого гораздо труднее избежать.

В любом случае, Intellisense несколько неуклонно улучшается. VS2010 намного точнее и стабильнее VS2008, а VS2012 выглядит лучше, чем VS2010 (хотя я еще не использовал его еще).

На самом деле, если у вас нет какой-либо конкретной зависимости от VS2010, вы можете просто обновить до VS2012.

+0

Спасибо за поздний ответ. Тогда я дам VS2012. –

Смежные вопросы