【发布时间】:2022-01-14 02:18:10
【问题描述】:
我在 C# 程序中有这段代码:
ListOfCabins();
ListOfWoodTypes();
第一个函数如下所示:
private void ListOfCabins()
{
Logger.Info($"Start function ListOfCabins()");
try
{
}
catch (Exception ex)
{
...
}
Logger.Info($"End of function ListOfCabins()");
}
另外一个函数如下:
private void ListOfWoodTypes()
{
Logger.Info($"Start function ListOfWoodTypes()");
...
Logger 是一个典型的NLog 对象:
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
在日志中,我看到:
End of function ListOfCabins()
我没看到:
Start function ListOfWoodTypes()
我的应用程序崩溃了,我在事件日志中看到:
Application: ...
Framework Version: v4.0.30319
Description: The process wa terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException
at ...ListOfWoodTypes()
at ...
我在这里有不同的问题:
-
System.IO.FileNotFoundException,这是否意味着我的应用程序正常,尝试打开一些不存在的外部文件,或者它类似于 Java 进程,缺少*.class文件? - 为什么
System.IO.FileNotFoundException没有被我的try ... catch (Exception ex)子句捕获? - 日志呢?我希望至少能看到
ListOfWoodTypes()函数的第一行。这是否意味着NLog技术中有一些缓冲,导致NLog日志记录在崩溃时有一些延迟?
Edit1,无法调试
我正在自己的 PC 上开发这个程序,我在这里构建它,但是我将可执行文件复制到我客户的 PC,因此无法调试。
重新打开请求
我的问题与“.NET Global exception handler in console application”无关,它是针对这一例外的。此外,正如我自己的回答所示,Windows 事件日志中并未完全处理此特定异常。
【问题讨论】:
-
Exception Info: System.IO.FileNotFoundException at ...ListOfWoodTypes()- 我猜你的...ListOfWoodTypes()-code 里面有问题。不过,我们不能说,因为你没有分享它。另外:您是否尝试过逐步执行该方法, 看看它到底在哪里中断? -
表示没有找到文件。您的处理程序不会捕获异常,因为它没有发生在您的
try块内(例如,在单独的线程上)。这些都是在没有上下文的情况下简单推断出来的。其余的则需要调试器。 -
当您可以在日志中看到
End of function ListOfCabins()时,您为什么希望catch块起作用?这清楚地表明代码已经离开了try/catch块的范围。 -
附带说明:是的,Nlog 可能会做一些缓存,但绝不应该发生后面的消息可见而较早的消息不可见的情况。你的代码流有些奇怪。
-
不,在该示例中,显示的异常将是 TypeLoadException 并且 - 在应用程序日志中 - 内部异常将不可见。这是可能的异常层次结构顶层的 FileNotFoundException。
标签: c# exception nlog filenotfoundexception