Отключить создание символов отладки для определенных строк в C / ++? - PullRequest
1 голос
/ 09 июня 2011

Можно ли указать определенные блоки кода, для которых я не хочу, чтобы символы отладки генерировались во время сборки отладки в VC ++ 2010? Таким образом, эти части могут работать с оптимизированной скоростью, а другие (логические) блоки кода могут быть отлажены?

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

Ура, Mike

Ответы [ 2 ]

5 голосов
/ 09 июня 2011

Пара предложений:

  • каждый файл C или C ++ может иметь параметры, указанные отдельно - это очевидно, когда вы используете командную строку для компиляции, но вы также можете сделать это в IDE. Там нет необходимости создавать отдельный проект. Просто щелкните правой кнопкой мыши файл, для которого вы хотите установить «специальные» настройки, и выберите «Свойства». Большим недостатком этого является то, что не очевидно, что конкретный файл имеет настройки, отличные от настроек проекта, поэтому он может сбивать с толку, когда вещи, кажется, не создаются, как вы ожидаете, после того, как вы забыли о свойствах конкретного файла, которые были установлены.
  • вы можете попробовать optimize прагму (http://msdn.microsoft.com/en-us/library/chh3fb0k.aspx), чтобы увидеть, будет ли она делать то, что вы хотите

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

Некоторые дополнительные вещи, о которых следует помнить, это то, что между отладочной и не отладочной средой исполнения также есть различия - и вы можете ссылаться только на одну или другую. Таким образом, если медлительность, от которой вы хотите избавиться, находится во время выполнения отладки, вам нужно будет ссылаться на время без отладки, которое может затруднить отладку в других областях. Если вы используете C ++, существует также проблема отладки и безопасных итераторов (управляемых макросами _HAS_ITERATOR_DEBUGGING и _SECURE_SCL) - вы не можете смешивать и сопоставлять код, скомпилированный с различными настройками для этих конфигураций итераторов (см. Итераторы отладки Visual Studio ).

2 голосов
/ 09 июня 2011

Я бы предпочел альтернативное решение (которое требует меньше работы).Если вы не можете его найти, это может сработать для вас:

  • Переместить долго выполняющийся код обработки ввода в отдельный библиотечный проект
  • Создать библиотеку как неотлаженную
  • Свяжите библиотеку с вашим основным проектом
  • Скомпилируйте ваш основной проект как отладочный
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...