Как задержать консоль в visual studio
в последнее время я пытаюсь изучить C++ от этот сайт. К сожалению, всякий раз, когда я пытаюсь запустить один из образцов кода, я вижу, что программа открывается примерно на полсекунды, а затем сразу закрывается. Есть ли способ остановить немедленное закрытие программы, чтобы я мог увидеть плоды своих усилий?
Edit: как справедливо указывает Чарльз Бейли в комментарии ниже, это не будет работать, если есть символы, буферизованные в stdin , и нет действительно хорошего способа обойти это. Если вы работаете с подключенным отладчиком, Джон Dibling это, вероятно, самое чистое решение вашей проблемы.
тем не менее, я оставлю это здесь, и, возможно, кто-то еще найдет это полезным. Я использовал его много как быстрый взлом, когда написание тестов во время разработки.
в конце main функция, вы можете вызвать std::getchar();
Если вы используете Visual Studio и запускаете консольное приложение из среды IDE:
клавишей сочетания клавиш Ctrl-клавишу F5 (запуск без отладки) запустит приложение и будет держать окно консоли открытым, пока вы не нажмете любую клавишу.
решение Джеймса работает для всех платформ.
также на Windows вы также можете добавить следующее непосредственно перед возвращением из main функция:
Если вы используете Microsoft Visual C++ 2010 Express и запускаете проблему с сочетание клавиш Ctrl+клавишу F5 не работает для сохранения консоли открытой после завершения программы, взгляните на этот поток MSDN.
вероятно, ваша IDE настроена на закрытие консоли после запуска CTRL+F5; фактически, "пустой проект" в Visual C++ 2010 закрывает консоль по умолчанию. Чтобы изменить это, сделайте так, как предложил модератор Microsoft:
пожалуйста, правильно щелкните имя проекта и перейдите на страницу свойства, разверните свойства конфигурации -> Компоновщик -> система, выберите консоль (/SUBSYSTEM:CONSOLE) в раскрывающемся списке подсистема. Потому что по умолчанию пустой проект не указывает его.
обычно я просто ставлю точку останова на main() закрывающая фигурная скобка. Когда конец программы достигается любыми средствами, точка останова ударит, и вы можете ALT-Tab в окно консоли для просмотра вывода.
Почему бы просто не запустить программу с консоли, т. е. запустить программу из cmd.exe, если вы используете Windows. Таким образом, окно остается открытым после завершения программы.
[EDIT]: когда я использую KDevelop4, есть полноценный экземпляр Bash (Linux CLI), работающий на вкладке в нижней части IDE. Именно это я и использую в подобных обстоятельствах.
вызов cin.get(); 2 раза:
перед окончанием кода вставьте следующую строку:
это будет держать консоль, пока вы не нажмете клавишу.
Если вы запускаете свой код из компетентной IDE, например Код::Блоки, IDE будет управлять консолью, которую он использует для запуска кода, сохраняя его открытым, когда приложение закрывается. Вы не хотите добавлять специальный код, чтобы держать консоль открытой, потому что это помешает ей работать правильно, когда вы используете ее для реального, вне IDE.
хорошо, я предполагаю, что вы находитесь в Windows, используя Visual Studio. почему? Ну, потому что если вы находитесь на какой-то ОС Linux, то вы, вероятно, будете запускать его с консоли.
в любом случае, вы можете добавить дерьмо в конец своей программы, как предлагают другие, или вы можете просто нажать сочетание клавиш Ctrl + клавишу F5 (запуск без отладки), и Visual Studio оставит консоль после завершения.
другой вариант, если вы хотите запустить отладочную версию и не добавить хрень ваш код, чтобы открыть окно консоли (Пуск -> Выполнить -> cmd) и перейдите в папку отладка выходной каталог. Затем просто введите имя исполняемого файла, и он запустит вашу отладочную программу в консоли. Затем вы можете использовать приложение Visual Studio для процесса или что-то еще, если вы действительно хотите.
Если вы действительно отлаживаете приложение в Visual C++, нажмите клавишу F5 или зеленый треугольник на панели инструментов. Если вы на самом деле не отлаживаете его (у вас нет установленных точек останова), нажмите Ctrl+F5 или выберите "пуск без отладки" в меню (обычно это меню отладки, которое, я согласен, сбивает с толку.) Это будет немного быстрее, и что более важно для вас, будет пауза в конце без необходимости изменения кода.
кроме того, откройте командную строку, перейдите в папка, где находится ваш exe, и запустите его, введя его имя. Таким образом, когда он закончит работу, командная строка не закроется, и вы сможете увидеть вывод. Я предпочитаю оба этих метода добавлению кода, который останавливает приложение так же, как и его завершение.
добавьте следующую строку в конце программы. Он попытается захватить некоторую форму пользовательского ввода, таким образом, он останавливает автоматическое закрытие консоли.
Какие функции в Visual Studio (помимо system("pause"); ) останавливают закрытие консоли.
1 ответ 1
Если речь идет только о работе в IDE, для приостановки работы программы можно использовать обычные точки останова и отладчик, какие-то специальные вызовы в коде не нужны. Более того, использование вызовов типа system("pause") приведет к тому, что программу невозможно будет нормально вызывать из пакетных файлов: она будет каждый раз ждать ввода с реальной консоли, даже если стандартный ввод перенаправлен из файла и ожидалась работа без участия пользователя. Но, если все же действительно нужно приостановить консоль при любом запуске программы, есть несколько вариантов:
- Отображает приглашение ввода ("Нажмите любую клавишу")
- Прерывает работу программы до нажатия любой клавиши
- Работает только под Windows (в других ОС нет команды PAUSE)
- Внутренне вызывает командный интерпретатор, поэтому считается "тяжелым" вариантом (если производительность что-то значит в данном случае)
Есть миф, что такой вызов небезопасен, так как если поместить в папку с программой вредоносный файл pause.exe, он будет вызван вместо команды PAUSE. Это не так в современных версиях Windows.
То же самое, но не отображает приглашение ввода.
- Не отображает приглашение ввода
- Прерывает работу программы до нажатия клавиши Enter
- Стандартная функция - работает в любом окружении
В отличие от других вариантов, не ломает перенаправление стандартного ввода (достаточно поместить на вход строку любого содержания, и выполнение программы пойдет дальше).
- Не отображает приглашение ввода
- Прерывает работу программы до нажатия любой клавиши
- Нестандартная функция, доступна в DOS и Windows (в других ОС есть похожие аналоги)
Опять же, существует миф, что в Windows это какой-то DOSовский вызов и использовать его - дикий криминал. На самом деле, внутренне он реализуется как обычный вызов WINAPI-функции ReadConsoleInput, с предварительным отключением у консоли режима ENABLE_LINE_INPUT. Убедиться в этом можно, заглянув в исходники отладочной версии CRT, которые с некоторого времени частично открыты.
I have a collection of Boost unit tests I want to run as a console application.
When I'm working on the project and I run the tests I would like to be able to debug the tests, and I would like to have the console stay open after the tests run.
I see that if I run in release mode the console window stays up after the program exits, but in debug mode this is not the case.
I do not want to add 'system("pause");' or any other hacks like reading a character to my program. I just want to make Visual Studio pause after running the tests with debugging like it would if I were running in release mode. I would also like it if the output of tests were captured in one of Visual Studio's output windows, but that also seems to be harder than it should be.
How can I do this?
NOTE FOR FUTURE READERS: Please see so-olitary 's answer for the correct way if Ctrl+F5 combination does not work.
17 Answers 17
Try to run the application with the Ctrl + F5 combination.
@Lloyd: this isn't accurate - it runs the current configuration (which may or not be Debug) outside the debugger. There is no such thing as 'Release Mode' in VisualStudio
This is still a useful answer if you're trying to figure why an application is crashing (uncaught exception) and you'd like to review the error. There are better ways but this is quick and easy. +1
If you run Windows in a VM on a Mac, you need to disable the default Ctrl+F5 binding (Mac Settings > Keyboard > Shortcuts > Keyboard)
In the older versions it would default to the console subsystem even if you selected "empty project", but not in 2010, so you have to set it manually. To do this select the project in the solution explorer on the right or left (probably is already selected so you don't have to worry about this). Then select "project" from the menu bar drop down menus, then select "project_name properties" > "configuration properties" > "linker" > "system" and set the first property, the drop down "subsystem" property to "console (/SUBSYSTEM:CONSOLE)". The console window should now stay open after execution as usual.
THIS is the correct answer, yet it got no points, and an answer to another question got all the points, while the accepted answer is an over-complication that only works in one scenario (using boost tests). It pays to scroll down sometimes.
Boost test offers the following usage recommendations for Visual Studio that would enable you to run the unit tests automatically at the end of compilation and capture the output into the build window.
The nice side effect of this trick is it enable you to treat test failures as compilation errors. ". you could jump through these errors using usual keyboard shortcuts/mouse clicks you use for compilation error analysis. "
Update: This still holds for VS2012 and Boost 1.52 - not the most current version, but I guess that 1.54 will do, too.
Set a breakpoint on the last line of code.
And you can also press F9 to set the breakpoint on the last line of code. Also note that the console window might launch minimized, so you need to select it after debugging (F5).
What if an exception is thrown earlier or there are multiple return paths from that code and it might not reach that breakpoint?
The following works for me :-)
Here is another reason the console may disappear. And the solution:
With the new Visual Studio 2010 you might see this behavior even when you use Ctrl + F5 aka "start without debugging". This is most likely because you created an "empty project" instead of a "Win32 console application". If you create the project as a "Win32 console application" you can disregard this as it does not apply.
In the older versions it would default to the console subsystem even if you selected "empty project", but not in Visual Studio 2010, so you have to set it manually. To do this select the project in the solution explorer on the right or left (probably is already selected so you don't have to worry about this).
Then select "project" from the menu bar drop down menus, then select "project_name properties" → "configuration properties" → "linker" → "system" and set the first property, the drop down "subsystem" property to "console (/SUBSYSTEM:CONSOLE)". The console window should now stay open after execution as usual.
This is a probably an embarasing question as no doubt the answer is blindingly obvious.
I've used Visual Studio for years, but this is the first time I've done any 'Console Application' development.
When I run my application the console window pops up, the program output appears and then the window closes as the application exits.
Is there a way to either keep it open until I have checked the output, or view the results after the window has closed?
23 Answers 23
If you run without debugging (Ctrl+F5) then by default it prompts your to press return to close the window. If you want to use the debugger, you should put a breakpoint on the last line.
If you have a C++ app and Run Without Debugging and the console window still closes, you need to remember to explicitly set the Subsystem to Console under Configuration Properties / Linker / System. This can happen if you start with an Empty Project, which leaves Subsystem unset.
Didn't work for me :( The console window opens and shuts immediately, but the log pauses and waits for an additional press of F5
Trevor Robinson is right. If you start a blank project, and C++ item. You need to go to View->Property Manager->Property(wrench icon)->Config. Properties->Linker->System->Subsystem->in the pop-down menu, choose Console.
Im working on VS community 2017. ctrl+f5 not working, there is no Properties when I right click project, also the wrench icon is greyed out.
Right click on your project
Properties > Configuration Properties > Linker > System
Select Console (/SUBSYSTEM:CONSOLE) in SubSystem option or you can just type Console in the text field!
Now try it. it should work
This worked for my VS2013 Express, but the accepted answer did not. Very strange, as the accepted answer has worked for all Visual Studio versions I've used in the past.
as @JonathanMee stated you still have run Ctrl + F5. This was already set in my visual studio 2015, so the first answer was the one that helped most.
This is indeed correct. The familiar CTRL+F5 will fail if you, say, add a new C++ file to an empty project.
Starting from Visual Studio 2017 (15.9.4) there is an option:
The corresponding fragment from the Visual Studio documentation:
Automatically close the console when debugging stops:
Tells Visual Studio to close the console at the end of a debugging session.
I just tested this in VS2017 and VS2019. It requires both setting the subsystem to CONSOLE and turning this option off. Having one or the other or neither closes the window automatically.
I discovered that if the debugging a C++ console application where command arguments redirect a file to standard input (stdin), the window will automatically close regardless of the setting of this option.
Here is a way for C/C++:
Goto Debug Menu->Press StartWithoutDebugging
It will wait for .
try to call getchar() right before main() returns.
Doesn't work in VS 2008 for a simple Hello Name console app. cout, cin, cout, getchar(), console still closes. What's the deal?
Try putting getchar() twice if you have a cout just before getchar(). getchar() expects a char and you are already giving it with cout. Let me know if this helps :)
(/SUBSYSTEM:CONSOLE) did not worked for my vs2013 (I already had it).
"run without debugging" is not an options, since I do not want to switch between debugging and seeing output.
Solution used in qtcreator pre 2.6. Now while qt is growing, vs is going other way. As I remember, in vs2008 we did not need such tricks.
Here's a solution that (1) doesn't require any code changes or breakpoints, and (2) pauses after program termination so that you can see everything that was printed. It will pause after either F5 or Ctrl+F5. The major downside is that on VS2013 Express (as tested), it doesn't load symbols, so debugging is very restricted.
Create a batch file. I called mine runthenpause.bat , with the following contents:
The first line will run whatever command you provide and up to eight arguments. The second line will. pause.
Open the project properties | Configuration properties | Debugging.
Now, when you run, runthenpause.bat will launch your application, and after your application has terminated, will pause for you to see the console output.
I will post an update if I figure out how to get the symbols loaded. I tried /Z7 per this but without success.
Это, вероятно, вопрос о запуске, поскольку, несомненно, ответ ослепительно очевиден.
Я использовал Visual Studio в течение многих лет, но это первый раз, когда я создал любую консольную программу.
Когда я запускаю приложение, появляется окно консоли, появляется выход программы, а затем окно закрывается по мере выхода приложения.
Есть ли способ открыть его, пока я не проверил вывод или не просмотрел результаты после закрытия окна?
ОТВЕТЫ
Ответ 1
Если вы запускаете без отладки (Ctrl + F5), то по умолчанию он предлагает вам нажать return, чтобы закрыть окно. Если вы хотите использовать отладчик, вы должны поставить точку останова в последней строке.
Ответ 2
Щелкните правой кнопкой мыши на вашем проекте
Свойства> Свойства конфигурации> Линкер> Система
Выберите Console (/SUBSYSTEM: CONSOLE) в опции SubSystem или вы можете просто ввести Console в текстовое поле!
Теперь попробуйте. это должно работать
Ответ 3
Вот способ для C/С++:
Ответ 4
Откройте меню отладки- > Нажмите Начать без использования
Ответ 5
Ответ 6
попробуйте вызвать getchar() прямо перед возвратом main() .
Ответ 7
(/SUBSYSTEM: CONSOLE) не работал для моего vs2013 (у меня его уже было).
"run without debugging" не является параметром, так как я не хочу переключаться между отладкой и просмотром вывода.
Решение, используемое в qtcreator до 2.6. Теперь, когда qt растет, vs идет другим путем. Насколько я помню, в vs2008 нам не нужны такие трюки.
Ответ 8
Здесь решение, что (1) не требует каких-либо изменений кода или точек останова, и (2) приостанавливается после завершения программы, чтобы вы могли видеть все, что было напечатано. Он остановится после F5 или Ctrl + F5. Основной недостаток заключается в том, что на VS2013 Express (как проверено) он не загружает символы, поэтому отладка очень ограничена.
Создайте командный файл. Я назвал мой runthenpause.bat со следующим содержимым:
Первая строка будет запускать любую команду, которую вы предоставляете, и до восьми аргументов. Вторая строка будет. пауза.
Откройте свойства проекта | Конфигурационные свойства | Отладка.
Теперь, когда вы запустите, runthenpause.bat запустит ваше приложение, и после того, как ваше приложение завершится, вы остановитесь, чтобы увидеть вывод консоли.
Я опубликую обновление, если выясню, как загрузить символы. Я пробовал /Z7 за этот, но безуспешно.
Ответ 9
просто введите свою последнюю строку кода:
Ответ 10
Начиная с Visual Studio 2017 (15.9.4) есть опция:
Автоматически закрывать консоль, когда отладка прекращается:
Сообщает Visual Studio закрыть консоль в конце сеанса отладки.
Ответ 11
Вы можете запустить исполняемый файл из командной строки. Таким образом, вы можете увидеть весь вывод. Или вы можете сделать что-то вроде этого:
и таким образом окно не будет закрываться, пока вы не введете данные для переменной a .
Ответ 12
добавить "| pause" в поле аргументов команды в разделе отладки в свойствах проекта.
Ответ 13
Просто нажмите CNTRL + F5, чтобы открыть его во внешнем окне командной строки (Visual Studio не контролирует его).
Если это не сработает, добавьте следующее в конец вашего кода:
Подождите, пока вы нажмете клавишу, чтобы закрыть окно терминала, как только код достигнет конца.
Если вы хотите сделать это в нескольких местах, поместите вышеуказанный код в метод (например, private void Pause() ) и вызовите Pause() всякий раз, когда программа достигает возможного конца.
Ответ 14
Несколько лучшее решение:
в начале вашей программы.
- может использовать std:: exit()
- может иметь несколько возвратов из основного
- вы можете запустить свою программу под отладчиком
- Независимый IDE (+ независимый от ОС, если вы используете трюк cin.sync(); cin.ignore(); вместо system("pause"); )
- необходимо изменить код
- не будет останавливаться на std:: terminate()
- все равно произойдет в вашей программе вне сеанса IDE/debugger; вы можете предотвратить это под Windows, используя:
Ответ 15
Обязательно сделайте любой из них в конце функции main() и перед оператором return .
Ответ 16
В моем случае я испытал это, когда создал проект Empty C++ в версии VS 2017 для сообщества. Вам нужно будет установить для подсистемы значение "Консоль (/SUBSYSTEM: CONSOLE)" в разделе "Свойства конфигурации".
- Зайдите в "Просмотр", затем выберите "Менеджер недвижимости"
- Щелкните правой кнопкой мыши на проекте/решении и выберите "Свойство". Откроется страница свойств теста.
- Перейдите к компоновщику, затем выберите "Система"
- Нажмите "Подсистема" и появится выпадающий
- Выберите "Консоль (/SUBSYSTEM: CONSOLE)"
- Применить и сохранить
- В следующий раз, когда вы запустите свой код с помощью "CTRL +F5", вы должны увидеть результат.
Ответ 17
Вы также можете использовать эту опцию
Ответ 18
Ответ 19
Visual Studio 2015, импорт. Потому что я ненавижу когда примеры кода не дают необходимых импортов.
Читайте также: