Использование настраиваемой консоли для отладки консольных приложений 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 в конце вашей программы больше, чтобы увидеть результат.

ConEmu DefTerm settings page

изменение приложения код

поскольку это ваша собственная программа, вы можете добавить, например, следующие строки в голову вашего 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

некоторые идеи:

  1. просто запустите программу в ConEmu напрямую, а затем выберите прикрепить к процессу из меню отладка в Visual Studio. Вы можете добавить задержку в начале вашей программы, чтобы дать вам время для присоединения. Это своего рода боль, Если вам приходится делать это снова и снова, но это часто полезно для такого типа ситуации.

  2. добавить __debugbreak(); заявление к началу вашей программы (возможно, внутри #ifndef NDEBUG блок). Запустите программу из ConEmu напрямую. Используйте функцию JIT Visual Studio для подключения при выполнении отладочного перерыва и продолжайте отладку оттуда.