Почему Visual Studio обрабатывает ANSI Escape-коды по-разному при отладке?

Относится к:

  • Visual Studio Community Edition 2015 (C ++)
  • Windows 10

Visual Studio имеет два способа запуска программы на C ++ для консоли Win32: «Запуск без отладки (Ctrl + F5)» и «Запуск отладки (F5)». Оба запустят отдельное консольное окно для программы. Если программа отправляет управляющие коды ANSI через coutпервое окно работает, как и ожидалось, но второе покажет коды в виде символов, а непечатные коды, такие как ESC, будут заменены знаком вопроса в поле.

Почему это отличается? Есть ли способ, чтобы заставить escape-коды ANSI вести себя нормально при отладке?

2

Решение

В документации 2015 года не указано, что существует ограничение (для более ранних версий требуется платная версия).

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

Что касается того, почему это отличается, это, вероятно, потому, что отладчик перехватывает ввод / вывод программы, запущенной в окне консоли (и не позволяет ему изменять режимы ввода / вывода).

Дальнейшее чтение:

Из последующих комментариев @ Шон-Гуглер понял, что

  • коды ANSI исполняемого файла не интерпретировались при его естественном запуске (например, открытие из Проводник),
  • но сработало при запуске обычно от Visual Studio.

Напомнив, что Windows 10 окно консоли интерпретирует escape-последовательности ANSI,

  • он проверил, что исполняемый файл запускается, как и ожидалось, в окне консоли, и
  • предположил, что Visual Studio запускал исполняемый файл напрямую (без окна консоли) при отладке (F5), но сделал запустить его в окне консоли при нормальном запуске исполняемого файла (CtrlF5).

Одна из проблем при запуске консольного приложения из графического интерфейса (такого как Visual Studio) заключается в том, что приложению придется выполнить дополнительную работу для выделения консоли.

Дальнейшее чтение:

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]