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

时间:2010-10-16 13:40:42

标签: visual-studio debugging visual-studio-2010 visual-studio-debugging

  

答案摘要

     

要避免调试器捕获,请先按Ctrl + C关闭Visual Studio   托管过程(在项目属性中找到,调试选项卡)

     

如果您使用的是Visual Studio的Express版本,那就是全部   能做到。

     

如果您使用的是Pro或更好版本的Visual Studio,则可以   另外打开Debug>例外...,Win32例外,并取消选中   CTRL + C

     

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

原始

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

额外清晰度

  • 我不想修改Ctrl + C的行为。
  • 我不是在找工作。
  • 在调试会话期间按Ctrl + C时,我只是希望调试器 NOT 中断。

请注意,以下示例是设计的。这只是为了证明这种行为。我更改了ReadKey系列,因为它让人分心。

调试(运行)以下程序:

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

按Ctrl + C.调试器将中断,就像在Sleep行上设置断点一样。

你怎么关掉这个?我不希望调试器完全违反Ctrl + C.

VS2008 Pro在家中不会发生这种情况。

我现在尝试使用VS2008 Express和VS2010 Express(我可以轻松测试它的唯一版本),他们都这样做了。这让我相信它是一种Express行为,或者某个地方有一个设置可以打开/关闭它。

  1. 是否有设置在任何版本/版本中打开/关闭此功能?
  2. 此设置是否存在于VS2008,VS2010或两者中?
  3. Express版本中的设置是否公开?
  4. 我的VS2008 Pro实例是否与众不同?设置是否在旧版本的Visual Studio中暴露出来(我已经通过许多新版本进行了VS设置)。

5 个答案:

答案 0 :(得分:11)

现在也许这是常识,但在Visual Studio中调试时尝试使用ctrl-c停止topshelf应用程序时遇到了同样的问题。最后,我们认为你需要在抛出时关闭捕获control-c win32异常(Debug-> Exceptions,或者ctrl d,打开Win32异常,然后在抛出的列中取消选中control-c),然后再转到项目(运行服务)属性,在调试选项卡上选中启用非托管代码调试选项。我们使用的是MS Visual Studio 2010专业版10.0.40219.1 SP1Rel。

答案 1 :(得分:4)

我找到了答案,它是一个调试Exception选项。我不知道我是第一次错过它,但现在是:

调试 - >例外... Win32例外 - Control-C

这是VS2008专业版。

我还可以确认Express版本中存在 NOT 选项(缺少整个Win32 Exceptions节点)。

所以我留下的唯一问题是,因为我没有VS2010 Pro(但是?)是:VS2010 Pro版本中是否存在Win32 Exceptions节点和Control-C异常?

答案 2 :(得分:4)

在仅使用托管调试的控制台应用程序中按Ctrl + C时,似乎有一个bug in VS 2010 debugger / .NET 4会出现一个奇怪的“无符号”窗口。有一种解决方案可以启用混合模式调试。该错误说'固定',但如果其他人正在点击这个,请在​​连接错误上报告,以便修复进入修补程序/ 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

更新:似乎连接错误是针对VS 2010测试版的,但我看到使用VS 2010 RTM进行仅管理调试的奇怪“无源可用”,我认为这是最新的修补程序。

答案 3 :(得分:1)

答案 4 :(得分:0)

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

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

以下是C#中的示例用法:

只需在程序开头使用您选择的模式选项拨打电话就可以了!你好了!

希望这有帮助!

中号