使用自定义控制台进行Visual Studio控制台应用程序debugging

debugging控制台应用程序时是否可以将Visual Studio设置为使用非标准控制台?

我不确定默认控制台是什么,它看起来就像cmd.exe 。 当我debugging时,我真的很喜欢我的控制台应用程序在ConEmu中运行。

要清楚,我想单击“开始debugging”,过程应该像往常一样发生,但不是提出一个cmd.exe控制台,它应该调出一个ConEmu控制台(或其他)。

我正在使用Visual Studio 2010专业版

与此(未答复)问题密切相关: 使用Console2进行Visual Studiodebugging?

你混淆了条款。 “Windows控制台”不是“cmd.exe”,而是特殊的“服务”,例如使用“conhost.exe”实现Win7。

当你启动任何控制台应用程序(不pipecmd,powershell,或你自己的应用程序)窗口启动它在特殊的环境,它可能有可见的控制台窗口。 但它始终是内部的Windows控制台。

但! 控制台模拟器可以抓住这个窗口,隐藏真正的控制台并显示他们自己的模拟表面。 例如,您可以使用特殊开关(在SU上描述,在评论中链接)启动ConEmu并完成。

默认terminal更换

ConEmu有一个名为Default Terminal的function。 如果启用此function,您将可以在ConEmuterminal的Visual Studio中无缝启动您的应用程序。 这个想法是在源应用程序( explorer.exevcexpress.exe等)中挂钩CreateProcess,在设置中用|来分隔它们。 在项目wiki中阅读更多关于这个function的信息。

您可以select使用现有的ConEmu实例或为您的应用程序运行新窗口。 在应用程序退出后,ConEmu可以在控制台上显示Press Enter or Esc to close console...消息( Always无线电)。 不需要在程序结束时添加readline来查看输出。

ConEmu DefTerm设置页面

更改你的应用程序代码

因为它是你自己的程序,所以你可以在你的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 

一些想法:

  1. 只需在ConEmu中直接启动程序,然后从Visual Studio的“debugging”菜单中select“附加到进程”。 您可以在程序的开始处添加延迟,以便您有时间附加。 如果你不得不一遍又一遍地这样做,这是一种痛苦,但对于这种情况通常是有用的。

  2. 添加一个__debugbreak(); 声明到您的程序的开始(也许在#ifndef NDEBUG块)。 直接从ConEmu开始你的程序。 debugging中断时,使用Visual Studio的JITfunction进行连接,并从中继续debugging。