【问题标题】:Filtering debug output for C#过滤 C# 的调试输出
【发布时间】:2017-04-16 23:21:23
【问题描述】:

是否可以从我的 C# 调试输出中过滤掉不同类型的异常?

我想过滤掉“System.FormatException”,因为我知道它会发生,而且它对我的输出进行了垃圾监督。我正在扫描一个超过 20,000 行的文本文件,其中几乎四分之一是错误的,但我不想在输出中出现 5000 次“System.FormatException”...

代码如下,你可以看到,如果不是数字,它不会double.parse,所以它会捕获错误。

if (!(dataline.EndsWith(";0") || intCounter == 0))
{
    try
    {
        natMB = double.Parse(splitline[8], NumberStyles.AllowDecimalPoint, NumberFormatInfo.InvariantInfo);
    }
    catch
    {
        natMB = 0;
    }

    double intMB;
    try
    {
        intMB = double.Parse(splitline[9], NumberStyles.AllowDecimalPoint, NumberFormatInfo.InvariantInfo);
    }
    catch
    {
        intMB = 0;

【问题讨论】:

  • 验证进入函数的输入不是更好吗,在我看来,捕捉错误来验证用户输入并不理想。一个简单的 RegEx 可以为您进行数字验证。
  • 我同意。修复输入而不是捕获错误会更好。
  • 我添加了我正在使用的代码

标签: c# debugging filtering


【解决方案1】:

如果你想忽略一个异常,你可以把下面的 try/catch 放在它上面:

try
{
  // Insert your code here
}
catch(System.FormatException)
{

}

看到你的代码我推荐你使用

double d = 0;
Boolean success = double.TryParse(splitline[8], out d);

if(success)
  Console.WriteLine("Conversion successful!");
else
  Console.WriteLine("Damnit.");

相反。这将返回一个关于转换是否正常的布尔值,并将解析的双精度数据存储在您传递给函数的变量中。

【讨论】:

  • 我正在这样做,但它仍然出现在我的输出中。我正在尝试捕捉错误的数据(标点符号、单词......虽然它们应该是数字),并将它们替换为 0。
  • 我个人记录每个错误。在这种情况下,我会尝试防止错误而不是丢弃日志记录。根据我的经验,在实时环境中最难发现和修复的错误是日志记录错误。
  • @Dashzapp 然后使用 TryParse 而不是 Parse 作为 beta sugests。它还将提高您的性能,因为已知异常在 .net 中可以长时间工作
  • debugging ... 致 Liath:我正在一个错误记录器中记录每个人的详细信息。
  • 方法'TryParse'没有重载需要1个参数错误代码:double.TryParse(splitline[8], out d)
【解决方案2】:

我发现内置的 .NET 日志记录机制令人沮丧。我会看一下log4netNLog 之类的东西,它们可以让您大量控制记录的级别和名称空间。

将这些与 Log2Console 结合起来进行实时日志跟踪。

【讨论】:

  • 澄清我相信@beta 的答案在这种情况下是正确的,因为它可以防止错误发生 - 甚至更好的解决方案。如果您想要过滤掉已报告的错误并过滤已记录的错误,请查看这些技术。
【解决方案3】:

如果你想在调试的时候忽略这个异常,你可以禁用异常的catch。

在菜单中,转到:DebugExceptions...(在我的 Visual Studio 中,热键是 Ctrl + D, E).

然后单击“查找...”,然后搜索您的异常。当你找到它时,确保没有选中任何复选框。它现在应该忽略它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多