调试控制台应用程序时是否可以将 Visual Studio 设置为使用非标准控制台?
我不确定默认控制台是什么,它看起来就像cmd.exe
。我真的很希望我的控制台应用程序在调试时能够在 ConEmu 中运行。
需要明确的是,我想单击“开始调试”,并且该过程应该与平常完全一样,但它应该打开一个 ConEmu 控制台,而不是打开 cmd.exe
控制台(或其他)。
我使用的是 Visual Studio 2010 Pro
与此(未回答)问题密切相关:Use Console2 for Visual Studio debugging?
最佳答案
你混淆了术语。 “Windows控制台”并不是一个“cmd.exe”,而是一个特殊的“服务”,它是通过“conhost.exe”实现的,例如Win7。
当您启动任何控制台应用程序(无论是cmd、powershell还是您自己的应用程序)时,Windows都会在特殊环境中启动它,该环境可能具有可见的控制台窗口。但它始终是内部 Windows 控制台。
但是!控制台模拟器可以抓取此窗口,隐藏真实的控制台并显示自己的模拟表面。 例如,您可以使用特殊开关(在 SU 中描述,评论中的链接)启动 ConEmu 并完成。
默认终端更换
ConEmu 有一个名为默认终端
的功能。如果启用此功能,您将可以在 ConEmu 终端中从 Visual Studio 无缝启动应用程序。这个想法是在源应用程序中 Hook CreateProcess(explorer.exe
、vcexpress.exe
等,在设置中用 |
分隔它们)。在 project wiki 中了解有关该功能的更多信息。 .
您可以选择使用现有的 ConEmu 实例或为您的应用程序运行新窗口。在应用程序退出后,ConEmu 可以在控制台上显示 Press Enter or Esc to close console...
消息(Always
单选)。无需再在程序末尾添加 readline
即可查看输出。
更改您的应用程序代码
因为它是您自己的程序,所以您可以在 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
关于visual-studio-2010 - 使用自定义控制台进行 Visual Studio 控制台应用程序调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12602411/