Использование настраиваемой консоли для отладки консольных приложений Visual Studio
можно ли настроить Visual Studio на использование нестандартной консоли при отладке консольного приложения?
Я не уверен, что консоль по умолчанию, она выглядит так же, как cmd.exe
. Я бы очень хотел, чтобы мое консольное приложение работало в ConEmu при отладке.
чтобы быть ясным, я хочу нажать "начать отладку", и процесс должен происходить точно так же, как обычно, но вместо того, чтобы поднимать cmd.exe
консоль, она должна вызвать консоль ConEmu (или все.)
Я использую Visual Studio 2010 Pro
тесно связанный с этим (без ответа) вопрос:использовать Console2 для отладки Visual Studio?
2 ответов
вы перепутали термины. "Консоль Windows" не является " cmd.exe", но специальный "сервис", который реализован, например Win7, с " conhost.исполняемый."
когда вы начинаете любой консольное приложение (не имеет значения cmd, powershell или ваше собственное приложение) windows запускает его в специальной среде, которая может иметь видимое окно консоли. Но это всегда внутренняя консоль Windows.
но! Эмуляторы консоли могут захватить это окно, скрыть реальную консоль и покажите их собственную эмулированную поверхность. Например, вы можете запустить ConEmu со специальными переключателями (описанными на SU, ссылка в комментарии) и его сделать.
замена терминала по умолчанию
ConEmu имеет функцию с именем Default Terminal
. Если вы включите эту функцию, вы получите плавный запуск приложения из Visual Studio в терминале ConEmu. Идея подключения CreateProcess в исходное приложение (explorer.exe
, vcexpress.exe
и так далее, разделите их с |
в настройках.) Подробнее об этой функции читайте в разделе проект wiki.
вы можете использовать существующий экземпляр ConEmu или запустить новое окно для вашего приложения. И ConEmu может показать Press Enter or Esc to close console...
сообщение на консоли после выхода из приложения (с Always
радио). Нет необходимости добавлять readline
в конце вашей программы больше, чтобы увидеть результат.
изменение приложения код
поскольку это ваша собственная программа, вы можете добавить, например, следующие строки в голову вашего main
функции
в C++ пример
#ifdef _DEBUG
if (IsDebuggerPresent())
{
STARTUPINFO si = {sizeof(si)}; PROCESS_INFORMATION pi = {};
if (CreateProcess(NULL,
_T("\"C:\Program Files\ConEmu\ConEmu\ConEmuC.exe\" /AUTOATTACH"),
NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi))
{ CloseHandle(pi.hProcess); CloseHandle(pi.hThread); }
}
#endif
пример C#
#if DEBUG
ProcessStartInfo pi = new ProcessStartInfo(@"C:\Program Files\ConEmu\ConEmu\ConEmuC.exe", "/AUTOATTACH");
pi.CreateNoWindow = false;
pi.UseShellExecute = false;
Console.WriteLine("Press Enter after attach succeeded");
Process.Start(pi);
Console.ReadLine();
#endif
некоторые идеи:
просто запустите программу в ConEmu напрямую, а затем выберите прикрепить к процессу из меню отладка в Visual Studio. Вы можете добавить задержку в начале вашей программы, чтобы дать вам время для присоединения. Это своего рода боль, Если вам приходится делать это снова и снова, но это часто полезно для такого типа ситуации.
добавить
__debugbreak();
заявление к началу вашей программы (возможно, внутри#ifndef NDEBUG
блок). Запустите программу из ConEmu напрямую. Используйте функцию JIT Visual Studio для подключения при выполнении отладочного перерыва и продолжайте отладку оттуда.