在Console.Readline()和设置断点之间的Console App中的状态差异

时间:2013-02-01 05:17:30

标签: c# visual-studio console breakpoints visual-studio-debugging

以下代码表现很奇怪,我试图理解原因:

NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(8080);
EmbeddableDocumentStore db = new EmbeddableDocumentStore();
db.DataDirectory = @"C:\Google Drive\TradingFramework\RavenDatabase\";
db.UseEmbeddedHttpServer = true;
db.Initialize();

bool halt = true;

Console.WriteLine("Read to try server");
Console.ReadLine();

上面的代码“bool halt”初始化了一个RavenDB数据库,但是它与此问题的目的无关。我跑了2个场景:

  • a)在VS2012内的行bool halt = true;处的调试模式中设置断点。那时我应该可以访问一个在localhost:8080上监听的创建的Web服务器。事实并非如此。即使在断点之前将等待循环放入代码中也没有区别,Thread.Sleep(xxx)也没有。

  • b)我删除了断点并停止了代码执行,并等待行Console.ReadLine();处的用户输入。在这种情况下,localhost:8080上的服务器响应并正常工作。

为什么会这样?为什么在设置断点与Console.Readline()时没有执行某些操作?请注意我只是在测试/开发,但我试着了解它有什么区别?我总是在印象a)和b)是同一个,它中断代码执行。

1 个答案:

答案 0 :(得分:3)

Console.Readline()不会中断执行,只是等待来自用户的输入。应用程序中的其他线程继续正常运行。

断点实际上会停止执行,以允许您查看应用程序的状态。在这种状态下,所有线程都暂停,因此没有任何东西可以响应端口8080。

您可以打开命令提示符并键入nestat -a,在这种情况下,您应该在任一情景中看到有一个进程侦听端口8080.