Visual C++: разница между запуском с / без отладки в режиме выпуска
в чем разница между Начать Отладку ( Ф5 ) и запуск без отладки ( CTRL — Ф5 ) когда код компилируется в режим выпуска?
Я вижу, что CTRL — Ф5 — это в 10 раз быстрее, чем Ф5 для некоторого кода C++. Если я не ошибаюсь, отладчик присоединен к процессу-исполнителем Ф5 и это не для CTRL — Ф5 . Поскольку это режим выпуска, скомпилированный код не имеет никакой отладочной информации. Итак, если у меня нет точек останова, время выполнения должно быть одинаковым для этих двух, не так ли?!
(предположим, что режимы выпуска и отладки являются типичными конфигурациями, получаемыми при создании нового проекта Visual C++.)
4 ответов
проблема в том, что Windows падает в специальную отладочную кучу, если она обнаруживает, что ваша программа работает под отладчиком. Это происходит на уровне ОС и не зависит от каких-либо параметров режима отладки/выпуска для вашей компиляции.
вы можете обойти эту «функцию», установив переменную среды: _NO_DEBUG_HEAP=1
этот же вопрос сводил меня с ума некоторое время; сегодня я нашел следующее, откуда этот пост полученный: http://blogs.msdn.com/b/larryosterman/archive/2008/09/03/anatomy-of-a-heisenbug.aspx
«начать без отладки» просто говорит Windows, чтобы запустить приложение, как это обычно выполняется.
«начать с отладки» запускает отладчик VS и запускает приложение в отладчике.
Это действительно не имеет большого отношения к настройкам сборки отладки / выпуска.
когда вы создаете конфигурацию «отладки» по умолчанию вашего приложения, у вас будут следующие основные отличия от сборки выпуска:
- испущенный код не будет оптимизирован, поэтому легче отлаживать, потому что он более точно соответствует вашему источнику
- компилятор и компоновщик выведут a .PDB файл, содержащий много дополнительной информации, чтобы помочь отладчику-наличие или отсутствие этой информации не имеет никакого значения для производительности кода, просто простота отладки.
- условные макросы, такие как ASSERT и VERIFY, будут не-ops в сборке выпуска, но активны в сборке отладки.
каждый из этих детали независимы и опционны! вы можете включить или выключить любой или все из них и по-прежнему запускать код под отладчиком, вы просто не найдете жизнь так просто.
при запуске с отладкой вещи работают по-разному по нескольким причинам:
- отладчик VS очень неэффективен при запуске, отчасти потому, что все в VS медленные версии до VS2010 каждый пиксель экрана будет перекрашен примерно в 30 раз, когда IDE шатается в debug режим с большим миганием и мерцанием.
- в зависимости от того, как все настроено, отладчик может потратить много времени при запуске, пытаясь загрузить символы (т. е. файлы PDB) для многих и многих компонентов ОС, которые являются частью вашего процесса — он может попытаться получить эти файлы через интернет, что может занять возраст в некоторых обстоятельствах.
- ряд действий, которые обычно выполняет ваше приложение (загрузка DLL, запуск потоков, обработка исключений), приводят к тому, что отладчик будьте начеку. Это имеет эффект как замедления их, так и того, что они имеют тенденцию работать последовательно.
IsDebuggerPresent() и OutputDebugString() ведут себя по-разному в зависимости от того, подключен отладчик.
IsDebuggerPresent() просто возвращает другое значение, поэтому ваша программа может реагировать на это значение и вести себя по-разному. OutputDebugString() возвращает намного быстрее, когда нет отладчика, поэтому, если он вызывается много раз, вы увидите, что программа работает намного быстрее без отладчика.
при запуске «с отладкой»используется отладочная куча, даже для режима выпуска. Это вызывает серьезные замедления в коде, используя много malloc / free или new/delete, что может произойти в коде C++, не замечая этого, потому что библиотеки/классы, как правило, скрывают этот материал управления памятью от вас.
0.7 – Компиляция вашей первой программы
Прежде чем мы сможем написать нашу первую программу, нам нужно научиться создавать новые программы в нашей интегрированной среде разработки (IDE). В этом уроке мы расскажем, как это сделать, а вы скомпилируете и запустите свою первую программу!
Проекты
Чтобы написать программу на C++ внутри IDE, мы обычно начинаем с создания нового проекта (мы покажем вам, как это сделать чуть позже). Проект – это контейнер, в котором хранятся все файлы исходного кода, изображения, файлы данных и т.д., которые необходимы для создания исполняемого файла (или библиотеки, веб-сайта и т.д.), который вы сможете запускать или использовать. Проект также сохраняет различные настройки IDE, компилятора и компоновщика, а также запоминает, где вы остановились, чтобы позже, при повторном открытии проекта состояние IDE можно было восстановить с того места, где вы остановились. Когда вы решите скомпилировать свою программу, все файлы .cpp в проекте будут скомпилированы и слинкованы.
Каждый проект соответствует одной программе. Когда вы будете готовы создать вторую программу, вам нужно будет либо создать новый проект, либо перезаписать код в существующем проекте (если вы не хотите его оставлять). Файлы проекта обычно специфичны для конкретной IDE, поэтому проект, созданный в одной IDE, необходимо будет заново создать в другой IDE.
Лучшая практика
Создавайте новый проект для каждой новой программы, которую вы пишете.
Консольные проекты
Когда вы создаете новый проект, вас обычно спрашивают, проект какого типа вы хотите создать. Все проекты, которые мы создадим в этом руководстве, будут консольными. Консольный проект означает, что мы собираемся создавать программы, которые можно запускать из консоли Windows, Linux или Mac.
Ниже показан скриншот консоли Windows:
Рисунок 1 – Консоль Windows
По умолчанию консольные приложения не имеют графического пользовательского интерфейса (GUI), они выводят текст на консоль, считывают ввод с клавиатуры и компилируются в автономные исполняемые файлы. Они идеально подходят для изучения C++, поскольку сводят сложность к минимуму и обеспечивают работу в самых разных системах.
Не беспокойтесь, если вы никогда раньше не пользовались консолью или не знаете, как получить к ней доступ. Мы будем компилировать и запускать наши программы через наши IDE (которые при необходимости будут вызывать консоль).
Рабочие пространства / решения
Когда вы создаете новый проект для своей программы, многие IDE автоматически добавляют ваш проект в «рабочее пространство» («workspace» или «solution») (термин зависит от IDE). Рабочее пространство – это контейнер, который может содержать один или несколько связанных проектов. Например, если вы пишете игру и хотите иметь отдельные исполняемые файлы для одиночной и многопользовательской игры, вам нужно будет создать два проекта. Обоим этим проектам не имело бы смысла быть полностью независимыми – в конце концов, они являются частью одной игры. Скорее всего, каждый из них будет настроен как отдельный проект в рамках одного рабочего пространства.
Хотя вы можете добавить несколько проектов в одно рабочее пространство, мы обычно рекомендуем создавать новое рабочее пространство для каждой программы, особенно во время обучения. Это проще, и вероятность того, что что-то пойдет не так, меньше.
Написание вашей первой программы
Традиционно у программистов, пишущих на новом языке, первой программой является печально известная программа hello world, и мы не собираемся лишать вас этого опыта! Вы нас потом поблагодарите. Может быть.
Создание проекта в Visual Studio 2019
Когда вы запустите Visual Studio 2019, вы должны увидеть диалоговое окно, которое выглядит следующим образом:
Рисунок 2 – Диалоговое окно «Начало работы» Visual Studio 2019
Выберите Создание проекта (Create a new project).
После этого вы увидите диалоговое окно, которое выглядит следующим образом:
Рисунок 3 – Visual Studio 2019: диалоговое окно создания нового проекта
Если вы уже открыли предыдущий проект, вы можете открыть это диалоговое окно через меню Файл (File) → Создать (New) → Проект (Project).
Выберите Мастер классических приложений Windows (Windows Desktop Wizard) и нажмите Далее (Next). Если вы этого не видите, то вы, вероятно, при установке Visual Studio забыли выбрать установку Desktop development with C++. В этом случае вернитесь к уроку «0.6 – Установка интегрированной среды разработки (IDE)» и переустановите Visual Studio, как было показано (примечание: вместо полной переустановки вы можете запустить установщик Visual Studio и изменить существующую установку, чтобы добавить поддержку C++).
Далее вы увидите диалоговое окно, которое выглядит следующим образом:
Рисунок 4 – Диалоговое окно настройки нового проекта Visual Studio 2019
Замените существующее имя проекта на HelloWorld .
Рекомендуется также установить флажок «Поместить решение и проект в одном каталоге» (Place solution and project in the same directory), поскольку это сокращает количество подкаталогов, создаваемых с каждым проектом.
Нажмите Создать (Create), чтобы продолжить.
Наконец, вы увидите последнее диалоговое окно:
Рисунок 5 – Диалоговое окно параметров проекта Visual Studio 2019
Убедитесь, что тип приложения установлен как Консольное приложение (.exe) (Console Application (.exe)), и что параметр Предкомпилированный заголовок (Precompiled Header) не выбран. Затем нажмите ОК.
Вы создали проект! Чтобы продолжить, перейдите в раздел Обозреватель решений Visual Studio ниже.
Создание проекта в Visual Studio 2017 или в более ранней версии
Чтобы создать новый проект в Visual Studio 2017 или более ранней версии, выберите меню Файл (File) → Создать (New) → Проект (Project). Появится диалоговое окно, которое выглядит примерно так:
Рисунок 6 – Диалоговое окно «Новый проект Visual Studio 2017»
Сначала убедитесь, что слева указан Visual C++. Если вы не видите Visual C++, возможно, вы забыли выбрать установку поддержку Desktop development with C++ при установке Visual Studio. В этом случае вернитесь к уроку «0.6 – Установка интегрированной среды разработки (IDE)» и переустановите Visual Studio, как было показано (примечание: вместо полной переустановки вы можете запустить установщик Visual Studio и изменить существующую установку, чтобы добавить поддержку C++).
Если вы используете Visual Studio 2017 v15.3 или новее, под Visual C++ выберите Windows Desktop, а затем выберите Windows Desktop Wizard в главном окне.
Если вы не видите вариант с Windows Desktop, возможно, вы используете старую версию Visual Studio. Отлично. Вместо этого выберите Win32, а затем Win32 Console Application в главном окне.
Внизу в поле Name введите название своей программы (замените существующее имя на HelloWorld ). В поле Location вы можете при желании выбрать другое место для размещения вашего проекта. Пока подойдет и значение по умолчанию.
Нажмите ОК. Если вы используете старую версию Visual Studio, запустится мастер приложений Win32. Нажмите Next.
На этом этапе вы должны увидеть диалоговое окно мастера, которое выглядит примерно так (более старые версии Visual Studio используют другой стиль, но имеют большинство из тех же параметров):
Рисунок 7 – Мастер создания десктопного приложения Visual Studio 2017
Убедитесь, что вы сняли флажок Предкомпилированный заголовок (Precompiled Header).
Затем нажмите ОК или Finish. Теперь ваш проект создан!
Обозреватель решений Visual Studio
В левой или правой части окна вы должны увидеть окно под названием Обозреватель решений. В этом окне Visual Studio создала для вас решение (решение "HelloWorld"). Внутри него, имя которого выделено жирным шрифтом, находится ваш новый проект ( HelloWorld ). Visual Studio создала для вас в этом проекте ряд файлов, в том числе HelloWorld.cpp (в элементе дерева Исходные файлы (Source Files)). Вы также можете увидеть некоторые другие файлы .cpp или .h, которые пока можете игнорировать.
Рисунок 8 – Начальные окна Visual Studio 2019
В текстовом редакторе вы увидите, что Visual Studio уже открыла HelloWorld.cpp и создала для вас код. Выделите и удалите весь код и введите/скопируйте следующий код в вашу IDE:
Чтобы скомпилировать программу, либо нажмите F7 (если это не сработает, попробуйте Ctrl + Shift + B ), либо перейдите в меню Сборка (Build) → Собрать решение (Build Solution). Если всё пойдет хорошо, вы должны увидеть следующее в окне вывода:
Или, в зависимости от выбранного языка:
Это означает, что ваша компиляция прошла успешно!
Вопрос: У меня вылетела ошибка C1010 ("fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?"). Что теперь?
Вы забыли отключить предварительно скомпилированные заголовки при создании проекта. Заново создайте свой проект (в соответствии с инструкциями выше) и обязательно отключите предварительно скомпилированные заголовки.
Чтобы запустить скомпилированную программу, нажмите Ctrl + F5 или перейдите в меню Отладка (Debug) и выберите Запуск без отладки (Start Without Debugging). Вы увидите следующее:
Рисунок 9 – Запуск программы
Это результат выполнения вашей программы! Поздравляем, вы скомпилировали и запустили свою первую программу!
Создание проекта в Code::Blocks
Чтобы создать новый проект, перейдите в меню File (Файл) → New (Новый) → Project (Проект). Появится диалоговое окно, которое выглядит следующим образом:
Рисунок 10 – Code::Blocks. Диалоговое окно создания проекта
Выберите Console application (консольное приложение) и нажмите кнопку Go (перейти/создать).
Если вы видите диалоговое окно мастера консольного приложения, нажмите Next (далее), убедитесь, что выбран C++, и снова нажмите Next.
Теперь вам будет предложено назвать ваш проект. Назовите проект HelloWorld . Вы можете сохранить его где угодно. В Windows мы рекомендуем сохранить его в подкаталоге диска C, например C:\CBProjects .
Рисунок 11 – Code::Blocks. Диалогове окно сохранения проекта
Вы можете увидеть другое диалоговое окно с вопросом, какие конфигурации вы хотите включить. Значения по умолчанию здесь подойдут, поэтому выберите Finish.
Теперь ваш новый проект создан.
В левой части экрана вы должны увидеть окно Management (управление) с выбранной вкладкой Projects (проекты). Внутри этого окна вы увидите папку Workspace с вашим проектом HelloWorld внутри:
Рисунок 12 – Code::Blocks. Workspace
Внутри проекта HelloWorld разверните папку Sources (исходники) и дважды щелкните на « main.cpp ». Вы увидите, что для вас уже написана программа hello world!
Замените ее следующим кодом:
Чтобы собрать проект, нажмите Ctrl + F9 или перейдите в меню Build (Сборка) → Build (Сборка). Если всё пойдет хорошо, вы должны увидеть следующее в окне журнала сборки:
Это означает, что компиляция прошла успешно!
Чтобы запустить скомпилированную программу, нажмите Ctrl + F10 или перейдите в меню Build (Сборка) → Run (Запуск). Вы увидите что-то похожее на следующий скриншот:
Рисунок 13 – Запуск программы
Это результат выполнения вашей программы!
Для пользователей Linux
Пользователям Linux до компиляции в Code::Blocks может потребоваться установить дополнительные пакеты. Дополнительные сведения смотрите в инструкциях по установке Code::Blocks в уроке «0.6 – Интегрированная среда разработки (IDE)».
Если вы используете g++ из командной строки
В этом случае создавать проект не нужно. Просто вставьте следующий код в текстовый файл с именем HelloWorld.cpp и сохраните файл:
В командной строке введите:
Это скомпилирует и слинкует HelloWorld.cpp . Чтобы запустить скомпилированную программу, введите:
И вы увидите результат выполнения своей программы.
Если вы используете другие IDE или веб-компилятор
Вам нужно будет самостоятельно выяснить, как сделать следующее:
- создать консольный проект (только для IDE);
- добавить в проект файл .cpp (только для IDE, если он для вас не был создан автоматически);
- вставить в файл следующий код:
- скомпилировать проект;
- запустить проект.
Если компиляция завершилась ошибкой
Ничего страшного, сделайте глубокий вдох. Вероятно, мы сможем это исправить. 🙂
Сначала посмотрите на сообщение об ошибке, которое вам выдал компилятор. Чаще всего оно будет содержать номер строки, указывающий, какая строка содержала ошибку. Изучите и эту строку, и строки вокруг нее и убедитесь, что нет опечаток или орфографических ошибок. Также убедитесь, что вы не скопировали в код номера строк.
Во-вторых, посмотрите вопросы и ответы в уроке «0.8 – Несколько распространенных проблем C++», поскольку ваша проблема может быть там освещена.
В-третьих, прочтите комментарии ниже – кто-то мог столкнуться с той же проблемой.
Наконец, если всё вышеперечисленное не помогло, попробуйте поискать сообщение об ошибке в Google. Скорее всего, кто-то уже сталкивался с этим раньше и придумал, как это исправить.
Если ваша программа запускается, но окно мигает и сразу закрывается
Некоторые IDE автоматически не приостанавливают экран консоли после завершения выполнения программы. Ваша программа запускается, но окно вывода закрывается, прежде чем вы сможете просмотреть результаты.
Если это так с вашей IDE, следующие два шага решат вашу проблему:
Сначала добавьте или убедитесь, что следующие строки находятся в верхней части вашей программы (пользователи Visual Studio должны убедиться, что эти строки появляются после #include "pch.h" или #include "stdafx.h" , если таковые существуют):
Во-вторых, добавьте следующий код в конец функции main() (непосредственно перед оператором return ):
Это приведет к тому, что ваша программа будет ждать, пока пользователь нажмет какую-нибудь клавишу, прежде чем продолжить, что даст вам время изучить вывод вашей программы, прежде чем IDE закроет окно консоли.
Другие решения, такие как обычно предлагаемое system("pause") , могут работать только в определенных операционных системах, и их следует избегать.
Ваш антивирус также может блокировать выполнение программы. В таком случае попробуйте временно отключить его и посмотреть, решится ли проблема.
Для пользователей Visual Studio
Visual Studio не будет в конце делать паузу в работе консольного приложения, если оно запускается с отладкой (меню Отладка (Debug) → Начать отладку (Start Debugging)). Если вы хотите, чтобы она сделала паузу, вы можете либо использовать приведенное выше решение с дополнительным кодом, либо запустить свою программу без отладки (меню Отладка (Debug) → Начать отладку (Start Without Debugging)).
Заключение
Поздравляем, вы прошли самую сложную часть этого руководства (установку IDE и компиляцию вашей первой программы)!
Не волнуйтесь, если не понимаете, что делают все строки в программе HelloWorld . Мы рассмотрим и подробно объясним каждую строку в начале следующей главы.
Как запустить один проект без отладки в Visual Studio?
мое решение содержит несколько проектов, которые могут быть запущены. Иногда я хотел бы запустить один проект без использования настроек запуска проектов моего решения. Когда я нажимаю правой кнопкой мыши на проект, я могу перейти к Debug->Start New Instance, который запускает приложение с отладчиком.
но я хотел бы запустить новый экземпляр без отладчика. Это возможно?
13 ответов:
- возвращает текущий выбранный проект ( он будет использовать первый выбранный проект, если вы выбрали несколько проектов.)
- сохраняет текущий проект запуска
- устанавливает текущий выбранный проект в качестве стартового проекта и запускает текущий выбранный проект в режиме «запуск без отладки».
- восстанавливает начальный запуск Проект как стартап.
возможно, это новое в VS 2015, но нет необходимости добавлять пользовательский макрос — вы можете найти пункт меню Пуск без отладки в списке вещей, которые вы можете добавить.
перейти к инструментам — > настроить, следуйте изображениям ниже.
![]()
Я просто собрал этот макрос.. Это комбинация нескольких фрагментов, которые я нашел в интернете. Если проект настроен на запуск выхода проекта по умолчанию, он найдет и запустит. Если он настроен для запуска определенной программы,он будет работать. Этот макрос также не будет компилировать ваше приложение, поэтому вы захотите убедиться, что он скомпилирован перед запуском макроса. В то же время этот макрос не страдает от проблемы, упомянутой в макросе махина выше.
вот путь к решить проблему, связанную с макросом махина
описание проблемы: Четвертый шаг создает проблему и порождает раздражающий messagebox говоря : сборка должна быть остановлена, чтобы изменить свойство решения. Остановить сборку? ОК или отмена.
наслаждайтесь !
Я пытался сделать то же самое. Это похоже на надзор со стороны команды VS, что вы можете начать с отладки или без нее на уровне решения, но только с отладки на уровне проекта.
одна вещь, которую я заметил, это то, что если вы щелкните правой кнопкой мыши на панели инструментов и выберите «Настроить», во всплывающем окне действий перейдите в категорию «проект». Там есть команда для «Run»и» Run Selected». Интересно, что я добавил как в контекстное меню своего проекта, так и в основное кнопка бар, и элементы, кажется,всегда быть отключен.
также интересно, что команда контекстного меню проекта «Debug / Start New Instance» нигде не встречается в списке настраиваемых команд. Я просмотрел почти все категории и не смог найти его.
надеюсь, кто-то придумает хороший способ сделать это. было бы очень удобно!
короче нет.
Что вы можете сделать, это привязать ключ к «Set as startup project», а затем привязать другой ключ для запуска без отладки. Затем вам придется нажать 2 клавиши, чтобы начать этот проект без отладки, но по крайней мере это будет быстрее, чем используя мышь.
использовать запуск без отладки в меню «отладка» или
Ctrl + F5
или вы можете изменить веб.конфигурационный файл для проекта:
щелкните правой кнопкой мыши на проекте и установите его в качестве стартового проекта.
Нажмите Ctrl + F5
обычно я запускаю исполняемый файл напрямую. Если мне нужно одно решение без режима отладки много, я обычно добавляю их в меню быстрого запуска где-то на моей панели задач.
Как установить «Запуск без отладки» в VS в верхней панели
Как я могу установить «Пуск без отладки» в верхней панели IDE Visual Studio 2019 вместо «Локальный отладчик Windows». Меня раздражает, что каждый раз мне нужно нажимать CTRL + F5, чтобы начать работу без отладки.
Я просмотрел настройки, но ничего не увидел. Может я что-то упустил.
2 ответа
Вы можете добавить практически любую команду на панели инструментов IDE VS-2019. В правой части панели инструментов, куда вы хотите поместить команду, щелкните маленькую стрелку вниз и выберите команду «Добавить или удалить кнопки» во всплывающем окне:

Затем, если нужная команда не отображается в списке «доступных» кнопок, выберите команду «Настроить» (внизу). Затем во всплывающем окне нажмите кнопку «Добавить команду»:

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

После выбора нажмите «ОК» и «Закрыть» в первом всплывающем окне. Теперь командная кнопка появится (возможно, в крайнем левом углу) на панели инструментов.
Щелкните правой кнопкой мыши на панели инструментов, выберите «Настроить» в раскрывающемся меню.
Щелкните вкладку Команды в появившемся диалоговом окне.
Щелкните переключатель панели инструментов
В раскрывающемся меню справа от кнопки панели инструментов выберите вариант «Стандартный».
Нажмите кнопку Добавить команду
Щелкните категорию Debug слева
Прокрутите вниз до списка справа, найдите команду «Начать без отладки» и выберите ее.
