答案摘要
要避免调试器捕获,请先按Ctrl + C关闭Visual Studio 托管过程(在项目属性中找到,调试选项卡)
如果您使用的是Visual Studio的Express版本,那就是全部 能做到。
如果您使用的是Pro或更好版本的Visual Studio,则可以 另外打开Debug>例外...,Win32例外,并取消选中 CTRL + C
作为替代方案,您可以在调试时使用Ctrl + Break,除非像我这样将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(我可以轻松测试它的唯一版本),他们都这样做了。这让我相信它是一种Express行为,或者某个地方有一个设置可以打开/关闭它。
答案 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服务的服务时看到了这一点,该服务还允许您在本地调试服务作为控制台应用程序。
相关链接: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#中的示例用法:
只需在程序开头使用您选择的模式选项拨打电话就可以了!你好了!
希望这有帮助!
中号