【问题标题】:Try/Catch doesn't catch exceptionTry/Catch 不会捕获异常
【发布时间】:2015-05-28 06:18:41
【问题描述】:

我有 FiddlerApplication 的项目,可以为我节省一些会话。当我启动程序时,重启后第一次启动 100% 失败,然后 10% 失败 90% 工作。

最大的问题是当它失败时它不会在 try/catch 中捕获任何异常。这是我的代码

static class Program
{
    [STAThread]
    static void Main(string[] args)
    {
        try
        {
            browserToRun.GoTo("www.test.com"); 
            FiddlerApplication.AfterSessionComplete +=  FiddlerApplication_AfterSessionComplete;

            //HERE it fails
            FiddlerApplication.Startup(8888, true, true, true);
            FiddlerApplication.Shutdown();
        }
        catch (Exception ex)
        {
            // it is not getting to here
            FiddlerApplication.AfterSessionComplete -= FiddlerApplication_AfterSessionComplete;
            FiddlerApplication.Shutdown();
        }
    }

    public static void FiddlerApplication_AfterSessionComplete(Session sess)
    {
        try
        {
            if (!sess.fullUrl.Contains("test"))
            return;
            GlobalDownloadLink = sess.fullUrl;
        }
        catch (Exception ex)
        {
            successful = false;

            throw new System.ArgumentException(ex.Message, "FiddlerApplication_AfterSessionComplete");
        }
    }
}

我的新更新的 Apconfig 出现新错误配置系统初始化失败

<configuration>

  <runtime>
    <legacyCorruptedStateExceptionsPolicy enabled="true" />
  </runtime>
<configSections>

</configSections>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>

  <appSettings>
    <add key="BrowserShow" value="Y"/>
    <add key="DebugCreate" value="true"/>
    <add key="FileName10" value="AccountActivity"/>
    <add key="FileName20" value="ForeignActivities"/>
    <add key="FileNameShar" value="MatbeotSchirim"/>
  </appSettings>
</configuration>

【问题讨论】:

  • 抛出了什么异常?如果您不指定异常(例如NullReferenceException e catch),则永远不会对其进行管理。
  • 另外 - 我注意到你有一行 GlobalDownloadLink = sess.fullUrl;。这是在您的return; 之后,您确定这是对的吗?
  • 通过指定 Exception 它不会毫无区别地捕获每个异常?
  • "抛出了什么异常?"这是我在所有函数中都有刹车点的问题,并且捕获它只是失败而没有捕获异常
  • "GlobalDownloadLink" 是的,如果 fullUrl.Contains("test") 我不需要 url 是正确的

标签: c# .net fiddler


【解决方案1】:

除非您在函数上指定属性[HandleProcessCorruptedStateExceptions](代码中的Main 函数),否则某些异常不会被try..catch 块捕获。当然,同样可以通过修改配置文件来完成,如 Oxoron 所述。

【讨论】:

  • 一个人指定此[HandleProcessCorruptedStateExceptions] 属性以捕获破坏应用程序内存状态的Exception,例如“AccessViolationException”。
  • 能否通过添加 Console.Writeline 重新检查异常是否存在?我也不明白在 FiddlerApplication_AfterSessionComplete 的 catch-block 中重新抛出异常的目的......
  • 我想我发现了我有 watIn 对象的问题,它是thead,这个 FiddlerApplication 也是,所以我需要将它分离到另一个类,但是无论如何都可以
  • @VovaPotapov ,不明白你真正的问题是什么,你能描述一下你的解决方案吗?我猜你已经将 FiddleApplicatio 分离到另一个类或类似的东西,对吗?遇到同样的问题,Fiddler 冻结了我的应用,所以你的回答会对我有很大帮助。
【解决方案2】:

尝试添加 <runtime> <legacyCorruptedStateExceptionsPolicy enabled="true" /> </runtime>

到配置文件。 来源here

【讨论】:

  • 旧的CLR Exception Swallowing 政策。
  • 在我添加这个之后我得到了另一个错误-配置系统初始化失败
【解决方案3】:

您的代码中的一个问题是您从处理会话的背景线程中抛出System.ArgumentException;此类异常不会被主线程上的异常处理程序捕获。

除此之外,您现在编写代码的方式是错误的;调用Startup 然后立即调用Shutdown 不会有任何用处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2012-08-06
    相关资源
    最近更新 更多