在System.dll中发生了类型为“System.Net.WebException”的第一次机会异常。

3

我正在使用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,但是即使在Visual Studio的输出窗口(View -> Output)中显示错误消息,catch也从未被触发。

我该如何查看这个导致程序崩溃的错误的内部异常?这是我第一次看到调试器在异常被触发时没有触发catch。


4
有关首次机会异常的信息,请参见http://blogs.msdn.com/b/davidklinems/archive/2005/07/12/438061.aspx。 - saluce
2个回答

12

我理解你所说的“First chance exception”指的是输出到Debug控制台的消息吗?每当发生异常时,都会输出此消息。这个异常可能被代码捕获并处理,不允许其向上传播到堆栈。TweetSharp可能在其代码中捕获了这个异常并以某种方式处理,因此它永远不会到达你的catch块。

这是正常现象,只有调试器会显示此消息。如果这对你造成问题(除了消息显示在Output窗口之外),请提供更多细节。


1
我本来在找别的东西,但这个吸引了我的注意。如果你想重新抛出异常,那么你需要替换它。
catch (WebException e) { throw e; }

使用这个,这样你就不会弄乱堆栈跟踪。
catch (WebException e) { throw; }

实际上,如果你在 catch 块中什么都没做(比如记录日志)只是重新抛出异常,那就不要包含异常处理,因为这本来就会发生。 - CaffGeek
确实如此,错过了显而易见的信息 :) 但是,永远不要“throw e”。 - Mikko Viitala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接