2013-04-09 3 views
0

У меня есть консольное приложение, написанное на C#. Это приложение работает как автоматизация для тестирования веб-службы. Flow:Ловля исключений в консольном приложении C#

  1. Войдите в сетевую папку (олицетворения пользователя)
  2. копировать mp3 файл на локальный диск
  3. конвертировать mp3 в WAV
  4. Downsample
  5. облицовка волна
  6. извлечь некоторые полезные данные от wav
  7. отправить http-запрос
  8. удалять локальные файлы
  9. выписывать некоторые вещи TSV

приложение будет работать большой в течение нескольких часов (как правило, занимает около 24 часов, чтобы закончить тест). но каждый раз я получаю это сообщение: «Приложение перестало работать. Я запускаю это VS 2012 в режиме отладки, поэтому я вижу, какая строка вызывает какую-либо ошибку. Проблема в том, что я не смог чтобы поймать линию (или метод), которая бросает ошибку. Первоначально я думал, что контроллер домена вызвал эту проблему из-за настроек мощности.

Как я могу точно зафиксировать, какая ошибка пузырится по стеку?

+0

Пожалуйста, измените вопрос с 'eventvwr' записи, как [это] (http://stackoverflow.com/questions/5701767/windows-application-has-stopped-working-problem-event-name -clr20r3). Нам понадобится информация, чтобы узнать, является ли это исключением для первого или второго шанса, и если оно находится в вашем приложении или каркасе .Net или на более низком уровне. –

ответ

2

Все ли работает в какой-то петле? Или по таймеру?

Возможно, вы можете попытаться поймать вокруг тела цикла или метод, который запускает весь ваш код, добавить структуру ведения журнала по вашему выбору (log4net или nlog, похоже, хорошо), а затем в журнале catch исключение. Большинство систем ведения журналов позволяют включать исключение и будут включать в себя stacktrace и т. Д.

Ввод журнала отладки в течение всего процесса также может помочь сузить место, где это происходит.

+0

Оказывается, это была ошибка, возвращающаяся из библиотеки NAudio, которую я использую. помещая блок try/catch в цикл for, поймал это. просто разочарование, так как потребовалось 4 часа, чтобы попасть в состояние –

2

Вы можете перейти к средству просмотра событий в операционной системе, в котором запущено консольное приложение, а затем нажать «Приложение». Журнал событий регистрирует и отображает все исключения, брошенные в любое приложение, запущенное в операционной системе.

+0

очень приятно. полностью забыл об этом. так что это средство просмотра событий: Faulting application name: FPTest.vshost.exe, версия: 11.0.50727.1, отметка времени: 0x5011d445 Ошибка имени модуля: AdjMmsEng64.dll, версия: 10.0.0.7, отметка времени: 0x5149b748 код исключения: 0xc0000005 Fault смещение: 0x0000000000011adb Сбойного идентификатора процесса: 0x2b88 Сбойного времени запуска приложения: 0x01ce34f348432822 Faulting путь приложения: C: \ Users \ имя пользователя \ Documents \ Visual Studio 2012 \ Projects \ FPTest \ FPTest \ Bin \ Debug \ FPTest.vshost.exe Ошибка пути модуля: C: \ windows \ SYSTEM32 \ AdjMmsEng64.dll –

+0

Но я до сих пор не знаю, что это значит. –

+1

Потому что 'Event Viewer не предоставляет сведения об исключении. – Xaqron

0

Я рекомендую вам использовать рамки ведения журнала.

Я использую log4net практически во всех приложениях. Его очень просто использовать и настраивать.

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

try 
{ 
    // do whatever 
} 
catch(Exception ex) 
{ 
    // Log an error with an exception 
    log.Error("Exception thrown", ex); 
} 

С помощью такого рода библиотек вы можете получить выходные данные журнала в файл, базе данных или даже записываются в окне событий-просмотр, например.

0

Обратите внимание, что доступ к окнам дисков отказано для не администраторов поэтому заменить Z: с вашим выбором.

0

Похоже, что код исключения, который вы получаете, происходит, когда вы пытаетесь использовать что-то, что уже было собрано мусором. Вы используете что-нибудь после его утилизации?

Knowledge Base Article for 0xc0000005

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