在控制台应用程序c#中捕获异常

本文关键字:捕获异常 应用程序 控制台 | 更新日期: 2023-09-27 18:08:25

我有一个用c#编写的控制台应用程序。此应用程序作为自动化运行以测试web服务。流:

  1. 登录网络共享(冒充用户)
  2. 复制mp3文件到本地磁盘
  3. 将mp3转换为wav
  4. downsample
  5. 修剪波
  6. 从wav中提取一些有用的数据
  7. 发送http请求
  8. 删除本地文件
  9. 写一些东西到tsv

应用程序将运行几个小时(通常需要大约24小时来完成测试)。但每隔一段时间我都会收到这样的消息:"应用程序已停止工作。我一直在调试模式下运行这是VS 2012,所以,我可以看到哪一行抛出任何错误。问题是,我没有能够捕捉到抛出错误的行(或方法)。我最初认为是域控制器由于电源设置导致了这个问题。

我怎样才能准确地捕捉到堆栈中冒泡的错误?

在控制台应用程序c#中捕获异常

所有这些都在某种循环中运行吗?或者用计时器?

也许在循环体或运行所有代码的方法周围放置一个try-catch,添加一个您选择的日志框架(log4net或nlog似乎不错),然后在catch日志中记录异常。大多数日志框架允许你包含异常,并将包括stacktrace等。

在整个过程中放置调试日志还可以帮助缩小发生错误的地方。

您可以转到控制台应用程序运行的操作系统上的事件查看器,然后单击"应用程序"。事件查看器记录并显示在操作系统上运行的任何应用程序上抛出的所有异常。

try
{
   // your code
}
catch (Exception e)
{
   System.IO.File.WriteAllText(@"Z:'err.txt", e.ToString());
}

请注意,非管理员拒绝访问windows驱动器,因此将Z:替换为您的选择。

我建议您使用日志记录框架。

我在几乎所有的应用程序中使用log4net。它的使用和配置非常简单。

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
try
{
    // do whatever
}
catch(Exception ex)
{
     // Log an error with an exception
     log.Error("Exception thrown", ex);
}

通过使用这些类库,您可以将日志数据输出到文件,数据库,甚至写入windows事件查看器。

看起来,当您尝试使用已经被垃圾收集的东西时,会发生异常代码。你还在使用任何被丢弃的东西吗?

知识库文章为0xc0000005