понедельник, 29 ноября 2010 г.
Как завершает свою работу Outlook 2007
Оказывается, что для этого он использует TerminateProcess, а не ExitProcess...
воскресенье, 14 ноября 2010 г.
Зависание на Shutdown-е (AVer Quick)
Иногда при завершении работы системы система мне показывает диалог "Ожидание" со временем переходящее в "Зависание" ([1], Windows XP) с жалобой "Приложение AVer Quick не отвечает".
AVer Quick (AVerQuick.exe) - это часть ПО от TV-тюнера AverMedia.
AVer Quick (AVerQuick.exe) - это часть ПО от TV-тюнера AverMedia.
вторник, 2 ноября 2010 г.
Анализ дампов Delphi-приложений. CPU spike (Episode #2)
Еще один случай гиперактивности программы, когда в один прекрасный момент приложение начало очень активно использовать процессор.
воскресенье, 24 октября 2010 г.
Анализ дампов Delphi-приложений. Hang (Episode #2)
История о зависании плагина для Internet Explorer-a.
С чего началась история - было замечено, что в определенный момент этот BHO (Browser Helper Object)ля IE прекращал подавать признаки жизни (то бишь - внешние проявление активности). А может даже зависал браузер (детали, к сожалению, уже не помню)...
С чего началась история - было замечено, что в определенный момент этот BHO (Browser Helper Object)ля IE прекращал подавать признаки жизни (то бишь - внешние проявление активности). А может даже зависал браузер (детали, к сожалению, уже не помню)...
вторник, 19 октября 2010 г.
Анализ дампов Delphi-приложений. CPU spike (Episode #1)
Бывают такие моменты, когда приложение вдруг ни с того ни сего начинает проявлять гиперактивность - активно загружает процессор (CPU usage spike). Как правило в такой ситуации "особо старается" один их потоков процесса. На одноядерных (однопроцессорных) машинах это не трудно заметить по ухудшению комфортности работы за машиной.
В особо тяжелых случаях загружать процессор могут сразу несколько потоков.
В особо тяжелых случаях загружать процессор могут сразу несколько потоков.
четверг, 14 октября 2010 г.
Autoruns
В операционных системах Microsoft Windows XP, Windows Vista и Windows 7 разделы автозапуска обрабатываются в таком порядке:
- <Запрос на вход>
- [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx]
- [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]
- [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
- [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
- Папка «Автозагрузка»
- [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]
четверг, 7 октября 2010 г.
Анализ дампов Delphi-приложений. Hang (Episode #1)
Преамбула
Прибегает значит на днях сотрудник тестлаба с криками "Шеф, все пропало, все пропало! Гипс снимают, клиент уезжает!" (с). Тьфу ты - "Все зависло. Ничего не работает".
Прибегает значит на днях сотрудник тестлаба с криками "Шеф, все пропало, все пропало! Гипс снимают, клиент уезжает!" (с). Тьфу ты - "Все зависло. Ничего не работает".
понедельник, 20 сентября 2010 г.
Delphi WinDbg Extension Dll
Время от времени я занимаюсь анализом дампов скомпилированных в Delphi приложений. Не так чтобы профессионально, но в большинстве случаев удается выяснить причину проблемы. И каждый раз возникает желание как-то автоматизировать и облегчить сей процесс.
четверг, 16 сентября 2010 г.
MAPI, Exchange и Shutdown
Недавно столкнулся с интересным случаем, когда при завершении работы системы отображалось окно "Программа завершается... Пожалуйста подождите" со временем переходящее в "Программа не отвечает". Ситуация воспроизводилась не каждый раз, но более-менее стабильно.
Т.о. цикл историй о "зависаниях" при завершении работы системы продолжается :).
Т.о. цикл историй о "зависаниях" при завершении работы системы продолжается :).
среда, 1 сентября 2010 г.
Анализ дампов приложений, написанных на Delphi
Приложения могут содержать ошибки. Некоторые проявляются воспроизводятся легко и, как правило, не выходят за пределы отдела программирование (другими словами - не попадают к заказчику/клиенту). А некоторые появляются при весьма экзотических внешних условиях.
среда, 25 августа 2010 г.
Как создать дамп процесса
Несколько утилит, с помощью которых можно создать дамп памяти процесса (пользовательский дамп).
вторник, 17 августа 2010 г.
вторник, 27 июля 2010 г.
Простой пример зависшего на shutdown-е приложения
Небольшой тестовый пример, демонстрирующий методику поиска причины завичания приложения при завершении работы системы [1].
Практическая часть, так сказать :)
Практическая часть, так сказать :)
Методика диагностики зависания приложения при shutdown-е
Исходная позиция: есть некое приложение app.exe (Проблемное приложение), которое "подвисает" при завершении работы системы, в результате чего отображается окно "Программа не отвечает" (либо "Завершение программы").
Задача: найти отчет на вопрос "почему".
Цель: решить проблему (в идеале - навсегда).
Достижение поставленной цели - это отдельная песня и здесь обсуждаться не будет :)
Речь пойдет о методах и приемах, с помощью которых можно определить причину такого поведения приложения.
Задача: найти отчет на вопрос "почему".
Цель: решить проблему (в идеале - навсегда).
Достижение поставленной цели - это отдельная песня и здесь обсуждаться не будет :)
Речь пойдет о методах и приемах, с помощью которых можно определить причину такого поведения приложения.
вторник, 1 июня 2010 г.
Запись строк в реестр и Delphi
Программируя в Delphi очень желательно записывать строковые данные в реестр в соответствии с документацией.
четверг, 20 мая 2010 г.
История о том, как поток заблокировал самого себя
Интересный случай однажды встретился мне - поток заблокировал самого себя, а вместе с тем и подвесил все приложение. Случай скорее из области экзотики, но тем не менее, при его расследовании я узнал много нового, так что есть в нем определенный академический интерес.
Но обо всем по-порядку...
Но обо всем по-порядку...
вторник, 11 мая 2010 г.
Обработка ошибок и GetLastError()
Когда Вы вызываете функцию Windows, она проверяет переданные ей параметры, а затем пытается выполнить свою работу. Если Вы передали недопустимый параметр или если данную операцию нельзя выполнить по какой-то другой причине, она возвращает значение, свидетельствующее об ошибке.
среда, 5 мая 2010 г.
WM_QUERYENDSESSION и WM_ENDSESSION (Windows Shutdown)
Завершение работы Windows или как система завершает пользовательские приложения при Shutdown-e.
понедельник, 3 мая 2010 г.
Маленькая особенность OutputDebugString
Начиная с Windows 2000, все операционные системы Microsoft линейки NT целиком и полностью построены на Unicode. Все ключевые функции для создания окон, вывода текста, операций со строками и т.д. требуют Unicode-строк. Если какой-то функции Windows передается ANSI-строка, она сначала преобразуется в Unicode и лишь потом передается операционной системе.
В реализации это выглядит так: для функции доступной через API может существовать две версии: Ansi (принимает строки ANSI) и Wide (принимает строки Unicode) - например CreateProcessA и CreateProcessW. И Ansi-версия является оболочкой (шлюзом) к Wide.
Но оказывается есть и исключения...
В реализации это выглядит так: для функции доступной через API может существовать две версии: Ansi (принимает строки ANSI) и Wide (принимает строки Unicode) - например CreateProcessA и CreateProcessW. И Ansi-версия является оболочкой (шлюзом) к Wide.
Но оказывается есть и исключения...
пятница, 16 апреля 2010 г.
Вывод диагностической информации в Process Monitor
Начиная с версии 2.9 очень полезный инструмент от Марка Руссиновича (Mark Russinovich) и Брюса Когсвелла (Bryce Cogswell) Process Monitor поддерживает новую функциональность - возможность вывода своих диагностических (отладочных) сообщений в Process Monitor, для того чтобы можно было лучше коррелировать выполняемые приложением операции с другими событиями. Аналог OutputDebugString, но вывод показывается Process Monitor-ом (оригинал новости - [1]).
четверг, 15 апреля 2010 г.
SHFileOperation и двойной бэкслеш в MS Vista+
Код Windows Vista был значительно переработан по сравнению с XP. Я думаю, это хорошо - внутренние ошибки исправляются (а на их место приходят другие - но это уже совсем другая история :)).
И внешние проявление внутренних переработок могут быть весьма многообразны и совершенно не очевидны.
Здесь я расскажу об одной особенности функции SHFileOperation, которая проявляется на Висте и выше.
И внешние проявление внутренних переработок могут быть весьма многообразны и совершенно не очевидны.
Здесь я расскажу об одной особенности функции SHFileOperation, которая проявляется на Висте и выше.
понедельник, 12 апреля 2010 г.
Deadlock при вызове CoRegisterClassObject в DllMain
В процессе разработки одного плагина для браузера Chrome было замечено, вызов CoRegisterClassObject (ole32.dll) в точке входа динамической библиотеки (DLLMain) в Microsoft Windows Vista/7 приводит к зависанию потока.
Эксперимент показал, что эта проблема может возникнуть не только с хромом.
Эксперимент показал, что эта проблема может возникнуть не только с хромом.
воскресенье, 11 апреля 2010 г.
Особенность InitCommonControlsEx в Windows XP
В Windows XP вызов функции DialogBoxParamW может сразу возвращать управление вместо отображения диалогового окна, при выполнении следующих условий:
- у исполняемого файла есть манифест с name="Microsoft.Windows.Common-Controls" в <assemblyIdentity>
- в таблице импорта нет ссылок на comctl32.dll
суббота, 10 апреля 2010 г.
CreateToolhelp32Snapshot и многопоточность
В процессе поиска причины, по который программа аварийно завершается с ошибкой (другими словами просто вылетает), возникло предположение, что функция CreateToolhelp32Snapshot потоко-небезопасна.
пятница, 9 апреля 2010 г.
Первое сообщение
Здравствуйте.
Создал блог.
По первоначальному замыслу, буду писать здесь разные технические вещи. А там посмотрим - может "география" будет расширена :)
Создал блог.
По первоначальному замыслу, буду писать здесь разные технические вещи. А там посмотрим - может "география" будет расширена :)
Подписаться на:
Сообщения (Atom)