gpt4 book ai didi

c++ - 为什么 Visual Studio 在调试时以不同方式处理 ANSI 转义码?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:08 35 4
gpt4 key购买 nike

适用于:

  • Visual Studio 社区版 2015(C++)
  • Windows 10

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

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

最佳答案

2015年的文档没有说有限制(早期版本需要付费版本)。

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

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

进一步阅读:

从后续评论中,@Sean-Gugler 意识到

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

关于被提醒 Windows 10 console window解释 ANSI 转义序列,

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

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

进一步阅读:

关于c++ - 为什么 Visual Studio 在调试时以不同方式处理 ANSI 转义码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36210718/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com