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

时间:2013-04-09 21:46:18

标签: c# console

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

  1. 登录网络共享(模仿用户)
  2. 将mp3文件复制到本地光盘
  3. 将mp3转换为wav
  4. 下采样
  5. 修剪波
  6. 从wav中提取一些有用的数据
  7. 发送http请求
  8. 删除本地文件
  9. 写出一些东西给tsv
  10. 应用程序将运行几个小时(通常需要大约24小时才能完成测试)。但每隔一段时间我就会得到这样的信息:“应用程序已经停止工作了。我一直在调试模式下运行这是VS 2012所以,我可以看到什么行抛出任何错误。问题是,我还没能捕获引发错误的行(或方法)。我原本以为域控制器由于电源设置而导致此问题。

    如何准确捕获哪些错误在堆栈中冒出来?

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

在整个过程中进行调试日志记录也有助于缩小其发生的范围。

答案 2 :(得分:0)

我建议您使用日志框架。

我在几乎所有应用程序中都使用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事件查看器。

答案 3 :(得分:0)

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

请注意,非管理员拒绝访问Windows驱动器,因此请根据您的选择替换Z:

答案 4 :(得分:0)

当您尝试使用已经被垃圾收集的内容时,看起来就像您遇到的异常代码。处置后你是否正在使用任何东西?

Knowledge Base Article for 0xc0000005