visual-studio-2010 - 使用自定义控制台进行 Visual Studio 控制台应用程序调试

标签 visual-studio-2010 debugging console console-application

调试控制台应用程序时是否可以将 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.exevcexpress.exe 等,在设置中用 | 分隔它们)。在 project wiki 中了解有关该功能的更多信息。 .

您可以选择使用现有的 ConEmu 实例或为您的应用程序运行新窗口。在应用程序退出后,ConEmu 可以在控制台上显示 Press Enter or Esc to close console... 消息(Always 单选)。无需再在程序末尾添加 readline 即可查看输出。

ConEmu DefTerm settings page

更改您的应用程序代码

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

相关文章:

需要 Java 调试帮助 : display largest of 3 numbers

c - 单步执行直到退出函数 gdb

delphi - 如何在运行时获取行号

c++ - "std::cout"在 Android-ndk 中是否可用

visual-studio-2010 - 为什么有时我在VS2010中调试程序,我的ctrl被按下了?

c# - 插入查询不起作用

c# - 控制台应用程序在 visual studio 中打开后立即关闭

c# - Windows7 中的 VS 2010 设计器错误 'Could not find type XYZ'。在 XP 中工作正常

javascript - console.log 卡住 javascript 控制台

javascript - 定义一个已放入 Javascript 函数参数中的变量