【问题标题】:A first chance exception of type 'System.Net.WebException' occurred in System.dllSystem.dll 中出现“System.Net.WebException”类型的第一次机会异常
【发布时间】:2012-05-22 18:16:19
【问题描述】:

我正在使用 TweetSharp 查找用户的关注者。

代码如下:

public static void FindFollowersForUser(TwitterUserModel twitterUser)
{
    try
    {
        var followers = service.ListFollowersOf(twitterUser.TwitterName, -1);
        if (followers == null) return;
        while (followers.NextCursor != null)
        {
            var foundFollowers = service.ListFollowersOf(twitterUser.TwitterName, (long)followers.NextCursor);
            if (foundFollowers == null) continue;

            Debug.WriteLine("Followers found for: " + twitterUser.TwitterName);
            foreach (var follower in foundFollowers)
            {
                twitterUser.Followers.Add(follower.ScreenName);
            }
        }
    }
    catch (WebException e)
    {
        throw e;
    }
}

我尝试将代码包装在 try/catch 中,以捕获被触发的 WebException 错误并查看它的 InnerException,但尽管错误消息显示在输出窗口 (View -> Output) 中,但从未输入 catch视觉工作室。

我怎样才能看到这个破坏性错误的内部异常?这是我第一次看到调试器在触发异常时不触发 catch。

【问题讨论】:

标签: c# visual-studio-2010 debugging


【解决方案1】:

我假设当您说“第一次机会异常”时,您的意思是输出到调试控制台的消息?每当抛出异常时,都会输出该消息。异常可能会被代码捕获并处理,并且不允许向上传播。 TweetSharp 可能会在其代码中捕获此异常并以某种方式进行处理,因此它永远不会到达您的 catch

这是正常的,只有调试器会显示此消息。如果这在某种程度上对您来说是个问题(输出窗口中显示的消息除外),请提供更多详细信息。

【讨论】:

    【解决方案2】:

    我真的在寻找别的东西,但这让我很不爽。如果你打算重新抛出异常,那么你想替换它

    catch (WebException e) { throw e; }
    

    这样你就不会弄乱堆栈跟踪了。

    catch (WebException e) { throw; }
    

    【讨论】:

    • 实际上,如果你没有在 catch 块中做任何事情(比如记录它)而只是重新抛出它,甚至不包括异常处理,因为无论如何都会发生这种情况。
    • 没错,错过了明显的信息 :) 不过,永远不要“扔 e”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多