当前位置:  开发笔记 > 编程语言 > 正文

为什么在.NET/C#中将未处理的异常打印到stderr?

如何解决《为什么在.NET/C#中将未处理的异常打印到stderr?》经验,为你挑选了1个好方法。

我在Windows上用C#编写了一些程序,并注意到它们都将打印未处理的STDERR异常.我找不到任何关于这个的文档,具体是什么写STDERR的例外?是否有启用/禁用此选项或以其他方式控制打印异常文本的选项?

我很好奇,如何可靠地.NET或C#应用程序将打印未处理的异常到STDERR,也许开发人员可以使用编译器或其他选项完全禁用该功能(一个类似于Application.SetUnhandledExceptionMode),或者如果该程序可以由于未处理的异常导致崩溃,因此它不会打印到STDERR.



1> Hans Passant..:

大约45年前Ken Thompson等人创建Unix时,这种情况已经确定.习惯上写一些非常小的程序来做一些小事情并将它们一个接一个地链接起来.将一个程序的输出重定向为下一个程序的输入.

当你这样做时,有一件事情做得不好,那就是当其中一个程序失败时.将错误文本发送到下一个程序只会使其以完全不可识别的方式失败.因此需要另一个可以向终端显示错误消息的输出流.喜欢"不是自行车":)因此stdout和stderr之间的区别.

Windows必须采用非常类似的方法,以至少与许多现有软件兼容.控制台是旧的终端的仿真.因此,.NET将异常消息写入stderr.痛苦的顺便说一下,许多.NET程序员在ProcessStartInfo.RedirectStandardXxx上陷入困境.这经常失败,因为他们忘记重定向stderr或创建死锁,因为程序首先读取stdout然后stderr.文本编码灾难(控制台只能支持8位编码)是另一个结果.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有