Какой рейтинг вас больше интересует?
|
Главная / Главные темы / Тэг «решений»
Срочный выкуп авто — решение Ваших проблем 2013-08-25 18:46:43
Очень много людей встречается с ситуацией, когда срочно требуются деньги. Естественно, знакомые, ...
+ развернуть текст сохранённая копия
Очень много людей встречается с ситуацией, когда срочно требуются деньги. Естественно, знакомые, друзья и родственники помогут, если речь идет о незначительной сумме,...
[[ This is a content summary only. Visit my website for full links, other content, and more! ]]
Тэги: авто, выкуп, проблема, решение, срочный, статья
Обработка и логирование исключений под Windows и в веб сервисах (часть 11) 2013-08-19 16:43:00
+ развернуть текст сохранённая копия
Продолжаю цикл переводов понравившейся мне статьи автора James Dingle про исключения.
Первый пост посвященный этой статье находится здесь.
9. Сохраняйте дампы
Функция Win32 API MiniDumpWriteDump() позволяет вам сохранить дамп и продолжить выполнение приложения.
Это очень удобный шаблон для улучшения разрешения проблем, в дополнение к логам.
Это очевидно довольно дорогой процесс.
Так что использовать его нужно, довольно редко.
Но обычно результаты оказываются очень ценными.
Здесь написано как сделать это на Си:
http://blogs.msdn.com/b/joshpoley/archive/2008/05/19/prolific-usage-of-minidumpwritedump-automating-crash-dump-analysis-part-0.aspx
.
Дальше будет пример на C#.
Вы также можете найти много примеров в интернете.
Как только дамп сгенерирован и сохранен.
Вы просто открываете его в Visual Studio.
И имеете доступные исходные коды (возможно имелось ввиду, что для разбора они нужны).
Важно чтобы вы вызывали этот метод внутри вашего блока catch.
Сделав так вы получите исключение встроенное (сохраненное) в дампе.
И указатель текущей инструкции будет установлен на строке с ошибкой.
А не на строке, в которой дамп был создан.
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
namespace Sample
{
/// /// Creates a mini dump of the current process ///
internal static class MiniDump
{
public static void CreateDump(string path, MiniDumpType miniDumpType)
{
var exceptionInfo = new MiniDumpExceptionInfo
{
ThreadId = GetCurrentThreadId(),
ExceptionPointers = Marshal.GetExceptionPointers(),
ClientPointers = false // false because own process
};
Process process = Process.GetCurrentProcess();
using (var stream = new FileStream(path, FileMode.Create))
{
Debug.Assert(stream.SafeFileHandle != null);
// The problem Marshal.GetExceptionPointers can return null on x86 machines due to differences
// in low-level exception handling.
// Then passing a MiniDumpExceptionInfo structure with a NULL ExceptionPointers members causes an
// access violation. So we only pass this structure if we got a valid ExceptionPointers member.
// It will probably result that x86 machines will see the instruction pointer to the MiniDumpWriteDump
// line and not the exception itself.
IntPtr exceptionInfoPtr = Marshal.AllocHGlobal(Marshal.SizeOf(exceptionInfo));
Marshal.StructureToPtr(exceptionInfo, exceptionInfoPtr, false);
try
{
MiniDumpWriteDump(
process.Handle,
process.Id,
stream.SafeFileHandle.DangerousGetHandle(),
miniDumpType,
exceptionInfo.ExceptionPointers == IntPtr.Zero ? IntPtr.Zero : exceptionInfoPtr,
IntPtr.Zero,
IntPtr.Zero);
}
catch (Exception exception)
{
Trace("Cannot generate the mini-dump because of exception " + exception);
}
Marshal.FreeHGlobal(exceptionInfoPtr);
}
}
[DllImport("kernel32.dll")]
private static extern int GetCurrentThreadId();
[DllImport("DbgHelp.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
private static extern Boolean MiniDumpWriteDump(
IntPtr hProcess,
Int32 processId,
IntPtr fileHandle,
MiniDumpType dumpType,
IntPtr excepInfo,
IntPtr userInfo,
IntPtr extInfo);
[StructLayout(LayoutKind.Sequential, Pack = 4)]
private struct MiniDumpExceptionInfo
{
public Int32 ThreadId;
public IntPtr ExceptionPointers;
[MarshalAs(UnmanagedType.Bool)]
public bool ClientPointers;
}
}
[Flags]
internal enum MiniDumpType
{
Normal = 0x00000000,
WithDataSegs = 0x00000001,
WithFullMemory = 0x00000002,
WithHandleData = 0x00000004,
FilterMemory = 0x00000008,
ScanMemory = 0x00000010,
WithUnloadedModules = 0x00000020,
WithIndirectlyReferencedMemory = 0x00000040,
FilterModulePaths = 0x00000080,
WithProcessThreadData = 0x00000100,
WithPrivateReadWriteMemory = 0x00000200,
WithoutOptionalData = 0x00000400,
WithFullMemoryInfo = 0x00000800,
WithThreadInfo = 0x00001000,
WithCodeSegs = 0x00002000,
WithoutAuxiliaryState = 0x00004000,
WithFullAuxiliaryState = 0x00008000
}
}
Все, на этом статья заканчивается.
Тэги: (решение), ide, исключение, использование, сделать
Мультитач-клавиатура Logitech TK820 для Windows-компьютеров 2013-08-15 10:05:58
... полноформатной клавиатурой. И решение получалось, мягко скажем ...
+ развернуть текст сохранённая копия
Сначала мобильные устройства стремились наделить полноформатной клавиатурой. И решение получалось, мягко скажем, компромиссное. Сегодня же пользователи настолько привыкли к сенсорным экранам, что даже за компьютером предпочитают пользоваться всеми преимуществами мультитач-технологии. В этом пользователям Windows решила помочь компания Logitech, представив беспроводную клавиатуру TK820 с большим сенсорным трэкпадом, заменяющим традиционную мышь. Клавиатура является одним из устройств, за [...]
Тэги: logitech, беспроводный, клавиатура, периферия, решение
Обработка и логирование исключений под Windows и в веб сервисах (часть 10) 2013-08-08 22:04:00
... должно быть последним решением, реакцией на событие ...
+ развернуть текст сохранённая копия
Продолжаю цикл переводов понравившейся мне статьи автора James Dingle про исключения.
Первый пост посвященный этой статье находится здесь.
8. Обрушивайтесь правильно
В соответствии с правилом " 5 - Не проглатывать исключений ",
некоторые разработчики предполагают, что их приложение должно быть всегда работающим.
Таким образом они думают, что лучше пусть приложение поймает все исключения и останется на плаву.
Они оценивают такое поведение как образец надежности приложения.
И действительно, это звучит противоречащим интуиции, что обрушивание приложения может повысить его надежность.
Такой образ мысли зависит от ситуации, но самое главное он не полный (то есть он не учитывает всего).
Что в данном случае действительно важно, так это как просто и безболезненно расследовать падение приложения.
Выбор продолжать ли выполнение или остановить приложение является менее приоритетной задачей.
Возможны ситуации, когда лучше не продолжать выполнение приложения и обрушиться. На это есть следующие причины:
-
Приложение находится в состоянии, когда дальнейшее выполнение может повредить данные или внутреннюю логику.
В данном случае лучше выполнить "очищающий крах", чем продолжить "грязное выполнение".
Крах позволит рестартовать приложению с хорошо известной точки (из правильного состояния).
-
Времена, когда крах обозначался невразумительным message box ("Access memory violation at 0x00054357") с бесполезным дампом стека, уже прошли.
Это тот случай когда вы не можете подключить отладчик к приложению.
Потому что вы поставили ваше приложение пользователю (клиенту), или потому что вы не имеете доступа к продакшн окружению.
Надежда на лишь то, что дампы стека просты в использовании и высоко ценны в наше время.
-
Если ваше приложение это служба Windows под Windows 2008, то не пойманное исключение будет логировано как Windows Event вместе с дампом стека.
И мини дампы будут созданы автоматически вместе с Windows Error Reporting.
Вы можете сконфигурировать вашу службу Windows рестартовать автоматически.
-
.Net предлагает API Environment.FailFastwhich, который также генерирует дамп стека и лог исключений.
-
Получение большего числа ошибок во время фаз разработки и тестирования увеличивает основное качество приложения.
Если ошибки всегда ловятся, или что еще хуже тихо игнорируются.
То они могут остаться неизвестными или попасть вниз списка "известных предупреждений", которые никому не хватит времени расследовать.
Если проблемы сохранены в отчет и их просто чинить, то в конце вы получите приложение более высокого качества, без изменений навыков команды разработчиков.
Если ошибки игнорируются или требуют мучительных расследований.
То только высокоприоритетные проблемы будут решены и продукт будет поставлен с большим количеством ошибок.
-
В больших и/или распределенных продакшн окружениях проблемное звено будет обнаружено быстрее, если приложение обрушится.
Все за и против, а также возможные преимущества и недостатки зависят от процессов и команды в вашей компании.
Однако:
-
Подумайте об деградации (усечении функционала) перед падением.
Падение должно быть последним решением, реакцией на событие, которое ваше приложение несомненно не сможет обработать.
Если некоторая возможность не жизненно необходима для вашего приложения, то это не хорошо, если она приведет к падению всего приложения.
Однако, это должно быть проконтролированно в логике кода.
"Продолжение при любых ошибках" не приемлимый путь для реализации режима усеченного функионала.
Потому что поведение приложения не предсказуемо.
-
"Конфигурационный файл нечитаем", "база данных не существует", "диск переполнен"
могут быть валидными сценариями для того, чтобы опрокинуть ваше приложение с копыт.
Но ваше приложение может также продолжить работу с настройками производителя по умолчанию, создав недостающую БД, или продолжая работать в режиме read-only.
Все на самом деле зависит от требований и функциональности вашего приложения.
-
Крах может быть концом экземпляра вашего приложения.
Но он же может не быть концом жизненного цикла.
Бизнес должен понимать ущерб от проблемы.
Команда поддержки должна понимать как она может обойти проблему.
А команда разработки должна иметь возможность пофиксить ее.
Это должно быть частью архитектуры обработки ошибок приложением.
Windows Error Reporting это прекрасная возможность (функционал) предоставленный нам в Windows 2008.
По умолчанию, Windows Error Reporting пытается загрузить информацию о крахе в Microsoft и удалить ее когдв все будет кончено.
Вы можете настроить ключами реестра эту подсистему так, чтобы она сохраняла дамп краха на диск во всех случаях вашего собственного исследования.
Подробнее прочитать как это сделать можно здесь.
Продолжение следует ...
Тэги: (решение), исключение, сделать
Утверждено Советом Министров: итальянские адвокаты возвращаются к обязательной медиации 2013-08-08 02:10:45
После долгих трений, обсуждений, забастовок и протестов окончательно и бесповоротно было решено ...
+ развернуть текст сохранённая копия
После долгих трений, обсуждений, забастовок и протестов окончательно и бесповоротно было решено сделать процедуру посредничества в гражданских спорах обязательной. Несмотря на все просьбы и призывы Национального адвокатского совета, адвокаты в Италии все же были поставлены во главе «стола переговоров» между конфликтующими сторонами. Кроме того, адвокаты должны будут принимать участия в переговорах и встречах в течение [...]
Тэги: адвокат, адвокатский, действие, декрет, досудебная, забастовка, иск, италии, итальянский, компания, краткий, медиация, минимальный, новость, обязательный, подать, посредник, посредничество, решение, сколько, стоимость, стоить, тариф, услуга, фирма
Главная / Главные темы / Тэг «решений»
|
Взлеты Топ 5
Падения Топ 5
|