为什么Visual Studio在调试时会以不同的方式处理ANSI Escape代码?

时间:2016-03-24 21:59:00

标签: c++ visual-studio debugging visual-studio-2015 ansi-escape

适用于:

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

Visual Studio有两种方法可以为Win32控制台运行C ++程序:“无需调试启动(Ctrl + F5)”和“启动调试(F5)”。两者都将为该程序启动一个单独的控制台窗口。如果程序通过cout发送ANSI转义码,则第一个窗口按预期工作,但第二个窗口将代码显示为字符,不可打印的代码(例如ESC)替换为框中的问号。

为什么会有所不同?有没有办法让ANSI转义码在调试时正常运行?

1 个答案:

答案 0 :(得分:1)

2015年文档并未说明存在限制(早期版本需要付费版本)。

使用Visual Studio,您可以使用调试器附加到正在运行的进程,这可以避免此问题 - 前提是您的程序可以初始化并等待您执行此操作。

至于为什么它不同,这可能是因为调试器正在拦截在控制台窗口中运行的程序的输入/输出(并阻止它改变I / O模式)。

进一步阅读:

根据后续评论,@ Sean-Gugler意识到了

  • 可执行文件的ANSI代码在本机运行时未被解释(例如,从文件资源管理器打开),
  • 但在Visual Studio中正常运行 时工作。

提醒Windows 10 console window解释ANSI转义序列

  • 他验证了可执行文件在控制台窗口中按预期运行,并且
  • 推测Visual Studio在调试时直接运行可执行文件(没有控制台窗口)( F5 ),但在运行可执行文件时在控制台窗口中运行它通常( ctrl F5 )。

从GUI(例如Visual Studio)启动控制台应用程序的一个问题是应用程序必须做一些额外的工作来分配控制台。

进一步阅读: