gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:44:41 26 4
gpt4 key购买 nike

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

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

最佳答案

当 Ken Thompson 等人创建 Unix 时,大约 45 年前就确定了这一点。人们习惯于编写非常小的程序,做一些小事并将它们一个接一个地链接起来。将一个程序的输出重定向为下一个程序的输入。

当您执行此操作时,其中一个程序失败时会出现效果不佳的情况。将错误文本发送到下一个程序只会使它以一种完全无法诊断的方式失败。因此需要另一个输出流来向终端显示错误消息。就像“不是自行车”:) 因此 stdout 和 stderr 之间的区别。

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

关于c# - 为什么在 .NET/C# 中将未处理的异常打印到 stderr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34048169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com