0

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

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

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

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

4

5 回答 5

2

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

于 2013-04-09T21:48:56.883 回答
2

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

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

在整个过程中放置​​调试日志也有助于缩小发生的范围。

于 2013-04-09T21:52:22.433 回答
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 事件查看器。

于 2013-04-09T21:57:20.947 回答
0
try
{
   // your code
}
catch (Exception e)
{
   System.IO.File.WriteAllText(@"Z:\err.txt", e.ToString());
}

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

于 2013-04-09T22:02:11.450 回答
0

当您尝试使用已经被垃圾收集的东西时,您似乎会遇到异常代码。处理完之后你还在用吗?

0xc0000005 的知识库文章

于 2013-04-09T22:12:18.203 回答