Console.Writeline停止我的程序... C#

6

我刚刚在我的Windows Froms C#应用程序中遇到了一个奇怪的问题。

我在代码中加入了一些Console.WriteLine进行调试,但突然间这个功能停止工作了。例如:

try{
   line(of.code);
   Console.WriteLine("HERE");
   other.line(of.code);
}
catch (Exception e)
{
   logger.logg(e.ToString());
}

我无法到达other.line(of.code);这一行,控制台中也没有输出"HERE"。

在代码中有几个地方出现了这种情况,在所有这些地方都会发生。它只是停止了,根本没有进入catch块...

最糟糕的是,之前它可以工作。我已经从事应用程序开发很长时间了,从未见过这样的情况。


也许你设置了控制台输出(使用Console.SetOut方法)的内容导致了异常? - Theraot
请展示之前的代码。如果你试图将 Console.WriteLine("HERE"); 更改为 Debug.WriteLine("HERE");,你看到了什么? - Marco
问题显然出现在你的代码中,而不是你在问题中提供的代码片段中。 - horgh
1
你在说哪个控制台?Windows Forms应用程序不应该有控制台。 - horgh
1
使用 cw 进行调试是愚蠢的。请使用 System.Diagnostics.Debug。 - Nahum
显示剩余5条评论
2个回答

6

如果你只是需要它来调试,请尝试

System.Diagnostics.Debug.WriteLine("HERE");

而不是。

这将把输出写入您的开发环境的输出窗口中,更重要的是,它将在您开发的应用程序类型(控制台应用程序、窗体应用程序、Web应用程序等)无关的情况下工作。

一旦您切换到“发布”模式,调试信息将被忽略并且不会编译进代码中。如果您也需要在那里使用它,您可以尝试使用Trace.Writeline。

注意:如果您按照以下方式声明Systems.Diagnostics,您的生活将变得更轻松:

using System.Diagnostics; // at the top of your code
                          
void Main()
{
    // Then you can say:
    Debug.WriteLine("Some message 1");
    Debug.WriteLine("Some message 2");
}

你甚至可以像这样进行条件调试打印:
for (int i = 0; i < 100; i++)
{
    Debug.WriteLineIf(i>90, $"i is greater than 90: {i}");
}

这个很好用,但之前它能够工作还是有点奇怪的 :P - Nick3
请注意,您可以通过 Console.SetOut(sw) 更改输出,其中 sw 是一个 StreamWriter。如果您需要控制台输出,请确保您正在使用控制台应用程序。此外,请查找进程中的 .RedirectStandardOutput 属性 - 检查它是否设置为正确的输出流。 - Matt
一旦我这样做了,即使我将其改回来,它也已经可以工作了。这种情况一再发生,每次都需要使用Debog而不是Console运行一次才能解决。 - Mayer Spitz
@MayerSpitz - 由于Nick3提供的代码片段并不真正可执行,我要求他提供一个我们可以执行的示例(请参见问题下面的评论)。然后就更容易澄清这个问题了。如果您能提供一些东西,那也可能会有所帮助。 - Matt
@Matt 如果你想的话,我可以与你分享我的代码库,里面没有太多内容,只是简单地使用Google的Matrix API进行API请求,没有什么特别的。我不记得过去有这个问题,只是在某个时刻Console.WriteLine()突然不起作用了,而且不仅不起作用,还停止了程序(不确定是否真的停止了或者只是没有显示任何控制台,我尝试设置断点,但它也没有到达 - 所以调试器也无法工作?),一旦我使用Debug.WriteLine(),即使我切换回Console.WriteLine(),它也能正常工作,后来又发生了同样的情况,我也做了同样的处理。 - Mayer Spitz
@MayerSpitz - 这听起来像是您的 Visual Studio 安装出了问题。尝试打开 Visual Studio 安装程序,进入已安装实例,点击“更多”按钮并选择“修复”。它将尝试重新安装 Visual Studio 的所有组件。然后重新启动计算机,检查问题是否仍然存在。 - Matt

3

以下是可能会导致 Console.WriteLine 失败的几种情况:

  1. 输出流已设置为无效对象或行为异常(在您的情况下停止程序)。

  2. 您正在运行不允许使用控制台的环境。

  3. 它不是 System.Console.WriteLine,而是由于一些 using 指令而调用了另一个同名方法。

*:我想不出这样的环境,但可能是某些插件系统?

如果您正在创建 Windows Froms 应用程序并且没有为 Console 设置输出流,则 Console.WriteLine 不会执行任何操作。因此,如果需要调试,请遵循 Matt 的建议


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接