使用自定义控制台进行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.exe
, vcexpress.exe
等)中挂钩CreateProcess,在设置中用|
来分隔它们。 在项目wiki中阅读更多关于这个function的信息。
您可以select使用现有的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
一些想法:
-
只需在ConEmu中直接启动程序,然后从Visual Studio的“debugging”菜单中select“附加到进程”。 您可以在程序的开始处添加延迟,以便您有时间附加。 如果你不得不一遍又一遍地这样做,这是一种痛苦,但对于这种情况通常是有用的。
-
添加一个
__debugbreak();
声明到您的程序的开始(也许在#ifndef NDEBUG
块)。 直接从ConEmu开始你的程序。 debugging中断时,使用Visual Studio的JITfunction进行连接,并从中继续debugging。