Что лучший способ состоит в том, чтобы собрать данные катастрофического отказа?

Мне не известен вариант ls, чтобы сделать это.

Вы можете попробовать

(cd /student/xxxx/209_repo && ls -d */)

Это запускает новый подоболочек, из-за (...) и в этом подоболочке изменяется в каталог .../209_repo, а затем выполняет ls.

После команды вы все еще находитесь в той директории, в которой находились, так как каталог изменений был выполнен только в подоболочке.

6
задан adeena 14 December 2008 в 16:51
поделиться

6 ответов

Я думаю, что Вы правы, Вы не знали бы то, что собирается пойти не так, как надо, который является точкой.

Однако Вы могли бы также рассмотреть добавление обработчика к событию ThreadException вместо этого.

Код выше будет работать, но будут сценарии, где много поточная обработка могла бы быть проблемой с таким кодом, с тех пор не, весь код в Вашей программе форм окон будет работать в главном приложении. Выполненный поток цикла.

Вот пример кода от связанной статьи:

[STAThread]
static void Main() 
{
   System.Windows.Forms.Application.ThreadException += new ThreadExceptionEventHandler(ReportError);
   System.Windows.Forms.Application.Run(new MainForm());
}

private static void ReportError(object sender, ThreadExceptionEventArgs e)
{
   using (ReportErrorDialog errorDlg = new ReportErrorDialog(e.Exception))
   {
    errorDlg.ShowDialog();
   }
}

Больше документации относительно MSDN.

На детали, с помощью события ThreadException также позволяют основному циклу сообщения продолжать работать в случае, если исключение не является критическим (т.е. сценарии отказоустойчивости), пока подход попытки/выгоды может требовать, чтобы Вы перезапустили основной цикл сообщения, который мог вызвать побочные эффекты.

9
ответ дан 9 December 2019 в 20:50
поделиться

Обертывание выгоды попытки вокруг целого приложения будет означать, что приложение выйдет на ошибку.

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

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

try
        {
            //Code that could error here
        }
        catch (FormatException ex)
        {
            //Code to tell user of their error
            //all other errors will be handled 
            //by the global error handler
        }

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

Глобальные обработчики для ошибок поймают все остальное. Вы используете их обработчиками событий присоединения к этим двум событиям System. Windows. Формы. Приложение. ThreadException (см. MSDN), и AppDomain. UnhandledException (см. MSDN),

Знайте, что Из исключений Памяти и StackOverflowException может не быть пойман никем с обнаружением ошибки.

1
ответ дан 9 December 2019 в 20:50
поделиться

С точки зрения реализации имеет смысл помещать цикл попытки/выгоды в мой основной program.cs файл, вокруг где приложение запущено?

Уверенный и всегда.

Необходимо использовать Try/Catch-Blocks везде, где Вы делаете что-то критическое, которое могло бы повысить исключение.

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

Но существует много исключений, которые не должны останавливать приложение полностью, исключения, которые просто можно глотать, поскольку они ожидаются и критически не нуждаются в приложении для остановки. Примером для этого является UnauthorizedAccessExceptions при перемещении или доступе к данным с программой.

Необходимо попытаться сохранить Вас Try/Catch-Blocks как маленьких по мере необходимости, а также использовать не слишком многое из них, из-за производительности.

Некоторые там используют Попытку/Выгоду регулирования осуществления программы. Этого нужно полностью избежать по мере возможности, причиной, повышающей Исключение, является уничтожитель производительности номер 1.

1
ответ дан 9 December 2019 в 20:50
поделиться

Лучший подход должен петь для AppDomain. UnhandledException и Приложение. ThreadException В основной функции Вашего приложения. Это позволит Вам записывать любые необработанные исключения в своем приложении. Переноситься выполненный в блоке выгоды попытки не ловит каждую вещь.

0
ответ дан 9 December 2019 в 20:50
поделиться

если Вы просто хотите получить катастрофические отказы, затем проигнорировать все ошибки и позволить DrWatson генерировать мини-дамп для Вас. Затем можно посмотреть на тот отладчик INA (windbg, предпочтен для мини-дампов), и он покажет Вам строку, Ваш код пошел не так, как надо на, и также все параметры, отслеживание стека и регистры. Можно установить Drwatson для генерации полного дампа, где Вы заставите весь дамп ядра памяти заниматься расследованиями.

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

Отправление мини-дампа Вам является другим вопросом, хотя, вот статья, необходимо будет сделать некоторую работу для отправления его через email/http/ftp/etc.

0
ответ дан 9 December 2019 в 20:50
поделиться

Если вы действительно хотите автоматически получать трассировки стека, Microsoft разрешает вам отправлять их через службы отчетов об ошибках. Все, что вам нужно сделать, это подписаться на цифровой сертификат от VeriSign и зарегистрировать его (бесплатно) в Microsoft.

Microsoft затем предоставит вам логин для загрузки мини-дампов с веб-сайта, которые отправляются, когда пользователь нажимает «Отправить отчет об ошибке».

Хотя люди могут нажать «Не отправлять», по крайней мере, это диалоговое окно Microsoft и, возможно, не то, которое вы должны кодировать самостоятельно. Он будет работать круглосуточно и без выходных, вам не придется беспокоиться о времени безотказной работы вашего веб-сервера, И вы можете отправить сведения об обходном пути для пользователей, И вы можете доставлять обновления через Центр обновления Windows.

Информация об этой службе находится в разделе "

1
ответ дан 9 December 2019 в 20:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: