Подтвердить что ты не робот

Использование настраиваемой консоли для отладки приложений консоли Visual Studio

Можно ли настроить Visual Studio на использование нестандартной консоли при отладке Консольного приложения?

Я не уверен, что такое консоль по умолчанию, она выглядит как cmd.exe. Мне действительно понравилось бы приложение Console для запуска в ConEmu при отладке.

Чтобы быть ясным, я хочу нажать "Начать отладку", и процесс должен происходить точно так же, как обычно, но вместо того, чтобы поднимать консоль cmd.exe, она должна вызывать консоль ConEmu (или что-то еще).

Я использую Visual Studio 2010 Pro

Близко связан с этим (неотвеченным) вопросом: Использовать Console2 для отладки Visual Studio?

4b9b3361

Ответ 1

Вы смешиваете термины. "Консоль Windows" не является "cmd.exe", а специальным "сервисом", который реализовал, например, Win7, с помощью "conhost.exe".

Когда вы запускаете консольное приложение any (не имеет значения cmd, powershell или ваше собственное приложение), окна запускают его в специальной среде, которая может иметь видимое окно консоли. Но это всегда внутренняя консоль Windows.

Но! Консольные эмуляторы могут захватить это окно, скрыть настоящую консоль и отобразить собственную эмулируемую поверхность. Например, вы можете запустить ConEmu со специальными переключателями (описанными в SU, ссылка в комментарии) и его выполнение.

Замена терминала по умолчанию

ConEmu имеет функцию с именем Default Terminal. Если вы включите эту функцию, вы сможете без проблем запускать свое приложение из Visual Studio на терминале ConEmu. Идея заключается в подключении CreateProcess в исходном приложении (explorer.exe, vcexpress.exe и т.д., Разделите их с помощью | в настройках). Подробнее об этой функции читайте в вики проекта.

Вы можете использовать существующий экземпляр ConEmu или запустить новое окно для своего приложения. ConEmu может показать сообщение Press Enter or Esc to close console... на консоли после выхода вашего приложения (радио Always). Не нужно больше добавлять readline в конце вашей программы, чтобы увидеть результат.

ConEmu DefTerm settings page

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

Поскольку это ваша собственная программа, вы можете добавить, например, следующие строки в начало вашей функции main

Пример С++

#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

Пример С#

#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

Ответ 2

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

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

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