【问题标题】:Difference in state in Console App between Console.Readline() and setting a break pointConsole.Readline() 和设置断点之间的控制台应用程序状态差异
【发布时间】:2013-02-01 05:17:30
【问题描述】:

以下代码的行为很奇怪,我试图理解原因:

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 的服务器会响应并且工作正常。

为什么会这样?为什么当我设置断点 vs Console.Readline() 时某些东西没有执行?请注意,我只是在测试/开发,但我试图了解它有什么不同?我一直认为 a) 和 b) 是一回事,它会中断代码执行。

【问题讨论】:

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


    【解决方案1】:

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

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

    您可以打开命令提示符并输入nestat -a,在这种情况下,您应该会看到在任何一种情况下都有一个进程正在侦听端口 8080。

    【讨论】:

    • 哦,是的,我怎么会忽略这一点。在我的情况下,我启动了一个服务器,在这种特殊情况下,它是在一个线程上管理的,但在我的控制台应用程序的上下文中。进入代码应该很难响应任何请求 ;-) 非常感谢
    猜你喜欢
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多