14

答案摘要

为避免调试器捕获 Ctrl+C,首先关闭 Visual Studio 托管进程(在项目属性的“调试”选项卡中找到)

如果您使用的是 Visual Studio 的 Express 版本,那么您可以这样做。

如果您使用的是专业版或更高版本的 Visual Studio,您还可以打开 Debug > Exceptions...、Win32 Exceptions,然后取消选中 Ctrl+C。

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

原来的

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

额外的清晰度

  • 我不想修改 Ctrl+C 的行为。
  • 我不是在寻找解决方法。
  • 我只是希望调试器在调试会话期间按下 Ctrl+C 时不会中断。

请注意,以下示例是人为设计的。这只是为了展示行为。我更改了 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(我可以轻松测试的唯一版本)上进行了尝试,他们都做到了。这让我相信它要么是一种快速行为,要么是某个地方有一个设置可以打开/关闭它。

  1. 在任何版本/版本中是否有打开/关闭此功能的设置?
  2. 此设置是否存在于 VS2008、VS2010 或两者中?
  3. 设置是否在 Express 版本中公开?
  4. 我的 VS2008 Pro 实例是唯一的吗?设置是在旧版本的 Visual Studio 中公开的东西已经继承(我已经通过许多新版本继承了 VS 设置)。
4

5 回答 5

12

Perhaps this is common knowledge by now but we were having the same problem when trying to stop a topshelf application using ctrl-c while being debugged in visual studio. In the end we figured that you need to turn off capturing control-c win32 exceptions when thrown (Debug->Exceptions, or ctrl d,e open Win32 Exceptions then uncheck control-c in the thrown column) and then also go to the project (that is running the service) properties and on the debug tab check the option enable unmanaged code debugging. We are using MS Visual Studio 2010 pro version 10.0.40219.1 SP1Rel.

于 2012-01-18T06:16:02.917 回答
4

我找到了答案,它是一个调试异常选项。我不知道我第一次是怎么错过的,但这里是:

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

这是在 VS2008 Pro 中。

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

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

于 2010-10-16T22:45:40.997 回答
4

There seems to be a bug in VS 2010 debugger / .NET 4 that you get a strange 'no symbols' window when Ctrl+C is pressed in a console application with only managed debugging. There is a work-around to enable mix-mode debugging. The bug says 'fixed', but if other folks are hitting this please report it on the connect bug so the fix gets into a hotfix / SP.

I saw this while debugging a service that uses TopShelf library to host a windows service which also lets you debug the service locally as a console application.

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

Related Links: TopShelf, (came from MassTransit)

Update: It seems the connect bug is for VS 2010 Beta, but I'm seeing the strange 'no source available' in managed-only debugging with VS 2010 RTM with what I believe to be the latest hotfixes.

于 2010-12-16T15:58:39.523 回答
0

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

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

这是 C# 中的示例用法:

只需在程序开始时使用您选择的模式选项进行调用,您就可以开始了!

希望这可以帮助!

于 2010-10-16T17:35:08.867 回答