2015-05-28 4 views
3

У меня есть проект с FiddlerApplication, который сохраняет некоторые сеансы для меня. Когда я запускаю первый запуск программы после перезапуска, 100% терпит неудачу, а затем 10% не работает, 90% работает.Try/Catch не исключает исключения

Самая большая проблема в том, что при сбое он не обнаруживает никаких исключений в 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"); 
     } 
    } 
} 

Мой новый Обновленный Apconfigwith новая ошибка конфигурации системы Не удалось инициализировать

<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> 
+0

Какое исключение выбрасывается? Если вы не укажете исключение (например, 'NullReferenceException e' catch), это никогда не будет управляться. – Ben

+0

Дополнительно - я заметил, что у вас есть строка 'GlobalDownloadLink = sess.fullUrl;'. Это после вашего «возвращения»: вы уверены, что это правильно? – Ben

+0

Указывая исключение, он не исключает все исключения без различия? –

ответ

4

Некоторые исключения не попадают в блокировку try..catch, если вы не указали атрибут [HandleProcessCorruptedStateExceptions] на функцию (Main функция в вашем коде). В том же случае, это может быть сделано путем изменения конфигурационного файла, описанного в Oxoron.

+1

. Один указывает этот атрибут '[HandleProcessCorruptedStateExceptions]', чтобы поймать «Исключение», что повредило состояние памяти приложений, например «AccessViolationException». –

+0

Просто переделал это сам. Ты прав. Отредактированный мой ответ ... –

+0

Можете ли вы проверить, является ли исключение закрытым или нет, добавив Console.Writeline? Я также не понимаю цели повторного выброса exeption в catch-блоке FiddlerApplication_AfterSessionComplete ... –

3

Попробуйте добавить <runtime> <legacyCorruptedStateExceptionsPolicy enabled="true" /> </runtime>

в конфигурационном файле. Источник here.

+0

старый 'CLR Exception Glallowing политика. –

+0

после того, как я добавлю это, я получил еще одну ошибку. Системе конфигурации не удалось инициализировать –

0

Одна из проблем вашего кода заключается в том, что вы бросаете System.ArgumentException из фона поток, на котором обрабатываются сеансы; такие исключения не будут улавливаться обработчиком исключений в вашем основном потоке.

Помимо этого, ваш код написан прямо сейчас, это просто неправильно; вызывая Startup, а затем сразу же вызывает Shutdown, ничего не поможет.

Смежные вопросы