代码之家  ›  专栏  ›  技术社区  ›  Tergiver

VS2010(Express)调试器在控制台应用程序中捕获Ctrl+C

  •  12
  • Tergiver  · 技术社区  · 14 年前

    答案摘要

    宿主进程(在“项目属性”的“调试”选项卡中找到)

    可以。

    如果您使用的是Pro或更高版本的Visual Studio,则可以 另外打开“调试”>“异常…”、Win32异常和取消选中 Ctrl+C键。

    作为替代方案,调试时可以使用Ctrl+Break,除非像我一样,Ctrl+C是硬连接到您的大脑中的。

    原件

    以下内容已编辑。汉斯似乎收回了他的回答,但他的提问帮助我缩小了问题陈述的范围:

    • 我不想修改Ctrl+C的行为。
    • 我不是在找工作。
    • 我只是想让调试器 不是

    请注意下面的例子是人为的。只是为了证明自己的行为。我改变了ReadKey行,因为它分散了人们的注意力。

    调试(运行)以下程序:

    class Program
    {
        static void Main()
        {
            System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
        }
    }
    

    你怎么关掉这个?我不希望调试器因为Ctrl+C而中断。

    这在VS2008 Pro的家里是不会发生的。

    我现在已经用VS2008 Express和VS2010 Express(我能轻松测试的唯一版本)都试过了,他们都这么做了。这让我相信,要么这是一个明确的行为,要么有一个设置来打开/关闭它。

    1. 此设置是否存在于VS2008、VS2010或两者中?
    2. 特快版上有没有曝光?
    3. 我的VS2008 Pro实例是唯一的吗?是在旧版本的Visual Studio中公开的设置(我已经在许多新版本中继承了VS设置)。
    5 回复  |  直到 12 年前
        1
  •  11
  •   naskew    13 年前

    也许这是目前的常识,但是当我们在visual studio中调试topshelf应用程序时,试图使用ctrl-c来停止该应用程序时遇到了同样的问题。最后,我们发现您需要在抛出时关闭捕获control-c win32异常(Debug->exceptions,或ctrl d,e open win32 exceptions,然后取消选中抛出列中的control-c),然后转到项目(正在运行服务)属性,并在“调试”选项卡上选中“启用非托管代码调试”选项。我们正在使用MS Visual Studio 2010 pro版本10.0.40219.1 SP1Rel。

        2
  •  4
  •   Tergiver    14 年前

    调试->异常。。。Win32异常-Control-C

    我也可以确认这个选项 不是 存在于快速版本中(缺少整个Win32异常节点)。

    所以我只剩下一个问题,因为我没有VS2010 Pro(还没有?)is:VS2010 Pro版本中是否存在Win32异常节点和Control-C异常?

        3
  •  4
  •   yzorg    14 年前

    bug in VS 2010 debugger / .NET 4 当在只有托管调试的控制台应用程序中按下Ctrl+C时,会出现一个奇怪的“无符号”窗口。有一种方法可以启用混合模式调试。这个bug说“已修复”,但是如果其他人遇到这个问题,请报告connect bug,这样修复就会进入一个hotfix/SP。

    我在调试一个使用TopShelf库托管一个windows服务的服务时看到了这一点,该服务还允许您作为控制台应用程序在本地调试该服务。

    https://connect.microsoft.com/VisualStudio/feedback/details/524889/debugging-c-console-application-that-handles-console-cancelkeypress-is-broken-in-net-4-0?wa=wsignin1.0

    相关链接: TopShelf ,(来自 MassTransit

    更新:似乎连接错误是针对VS2010测试版的,但是我看到了奇怪的“没有可用的源代码”在VS2010 RTM的托管调试中,我相信这是最新的修补程序。

        5
  •  0
  •   Community CDub    8 年前

    CTRL-C直接连接到控制台窗口本身进行“中断”操作。打开一个新的控制台应用程序,ping一些东西,然后立即按CTRL-C。它将中止ping。

    你说VS Pro没有这种行为。我假设它只是自己设置了SetConsoleMode,而VS Express没有。但是,您仍然可以直接告诉控制台忽略CTRL-C,并用SetConsoleMode将其作为直接输入。有关详细信息,请参阅此链接:

    下面是C#中的一个用法示例:

    只需在程序开始时使用您选择的模式选项拨打电话,您就可以很好地开始了!