Как правило, фоновые приложения выполняются в виде системных служб. В этом случае фатальные ошибки приводят к закрытию приложения и, возможно, автоматическому его перезапуску, если это указано в настройках приложения.
Но иногда по каким-то причинам вы можете захотеть сделать фоновое приложение в виде обычного пользовательского приложения. В этом случае вы не хотели бы, чтобы ваше приложение показывало какие-либо сообщения об ошибках.
...when altering one's mind becomes as easy as programming a computer, what does it mean to be human?..
Показаны сообщения с ярлыком обработка ошибок. Показать все сообщения
Показаны сообщения с ярлыком обработка ошибок. Показать все сообщения
27 января 2025 г.
7 декабря 2023 г.
Опасайтесь вторичных исключений
К нам обратился клиент, который пожаловался на то, что EurekaLog генерирует отчёт об ошибке в ненужном месте. Фактически, у клиента было ожидаемое исключение, которое он хотел скрыть, показав вместо этого простое сообщение. Клиент любезно показал свой код:
try Query.Delete; // - здесь возбуждается исключение except Query.Transaction.Rollback; ShowMessage('Sorry, could not delete the report'); Exit; end;Что происходит? Неужели EurekaLog игнорирует код пользователя?
4 апреля 2023 г.
Многие библиотеки/компоненты не тестируются на ошибки памяти
С нами связался клиент, который заявил, что EurekaLog вызывает исключение Access Violation в простом демонстрационном приложении.
В частности, приложение работает нормально при компиляции без EurekaLog и даёт ожидаемые результаты. Но приложение вылетает с ошибкой "Access violation at address 00410759 in module 'DemoApp.exe'. Read of address 83EC8B59" при компиляции с EurekaLog.
В частности, приложение работает нормально при компиляции без EurekaLog и даёт ожидаемые результаты. Но приложение вылетает с ошибкой "Access violation at address 00410759 in module 'DemoApp.exe'. Read of address 83EC8B59" при компиляции с EurekaLog.
5 октября 2022 г.
EurekaLog помогает не только вам, но и разработчикам используемых вами библиотек
С нами связался клиент, который утверждал, что его приложение отлично работало, пока он не добавил в него EurekaLog. Конкретнее, его приложение начало выбрасывать исключение
EAccessViolation
при выполнении кода определённого события.20 июля 2022 г.
EurekaLog очищает моё изображение? (даже в VCL есть баги)
К нам обратился клиент, который утверждал, что EurekaLog удаляет его изображения в программе. В частности, утверждалось, что код клиента "работал отлично", пока в приложение не была добавлена EurekaLog. После добавления EurekaLog ранее "рабочий" код перестал работать, вместо этого очищая изображение. Клиент также утверждал, что если отключить опцию "Extended memory manager" в EurekaLog, то всё снова работает прекрасно, но если эта опция включена, то ничего не работает, даже если отключить все остальные опции отладки памяти.
Упрощённый код выглядит действительно просто:
Упрощённый код выглядит действительно просто:
Buffer := TBitmap.Create; try Buffer.SetSize(64, 64); Buffer.Canvas.StretchDraw(Rect(0, 0, 64, 64), Bitmap); Bitmap.SetSize(64, 64); Bitmap.Canvas.Draw(0, 0, Buffer); finally Buffer.Free; end;Видите ли вы проблему в этом коде?
11 мая 2022 г.
Почему рекомендуется перезапускать приложение после вылета
К нам обратился клиент с жалобой на то, что EurekaLog скрывает его приложение.
4 февраля 2021 г.
Добавление EurekaLog в программу вызывает EOutOfResources (Out of system resources)
К нам обратился человек, который пожаловался на то, что его приложение работало нормально, пока он не добавил в него EurekaLog. После включения в проекте EurekaLog стало появляться исключение Out of system resources. Исключение возбуждалось вспомогательной функцией
OutOfResources
из модуля Vcl.Graphics
.22 декабря 2020 г.
Даже в пустых приложениях есть баги
С нами связался человек, который утверждал, что нашёл баг в EurekaLog. Он обосновал это утверждение следующим образом: если создать новое приложение DataSnap и добавить в него EurekaLog, то приложение вылетит с Access Violation при выходе.
19 ноября 2020 г.
Добавление EurekaLog в программу вызывает Integer Overflow?
К нам обратился человек, который пожаловался на то, что его приложение работало нормально, пока он не добавил в него EurekaLog. После включения в проекте EurekaLog стало появляться исключение Integer Overflow. Исключение происходило внутри функции
_UStrCatN
(функция конкатенации нескольких строк в RTL).9 октября 2020 г.
Добавление EurekaLog в программу вызывает Access Violation?
К нам обратился человек, который пожаловался на то, что его приложение работало нормально, пока он не добавил в него EurekaLog. После включения в проекте EurekaLog стало появляться исключение AccessViolation с текстом Access violation at address 00E15025 in module 'Project.exe'. Read of address 83EC8B69 и таким стеком:
- Contoso.pas TContosoEventMessage.BasePerform
- Vcl.Forms.pas TApplication.WndProc
- System.Classes.pas StdWndProc
- Vcl.Forms.pas TApplication.HandleMessage
- Vcl.Forms.pas TApplication.Run
- Project.dpr Initialization
8 марта 2020 г.
Как узнать, почему программа внезапно закрывается?
Иногда бывают ситуации, когда ваше приложение просто молча закрывается, и вы понятия не имеете почему. Как можно диагностировать подобные ситуации?
7 июня 2019 г.
Разработка API (контракта) для своей DLL
Или: не создавайте своих DLL, не прочитав эту статью!
Это статья по мотивам вопросов на форумах: "Как мне вернуть строку из DLL?", "Как передать и вернуть массив записей?", "Как передать в DLL форму?".
Чтобы вам не тратить половину жизни на разобраться - в этой статье я принесу всё на блюдечке.
Темы этой статьи в разной степени уже не раз затрагивались в этом блоге, но в этой статье они собраны в кучу, приведены обоснования. Короче, ссылкой на эту статью можно кидаться в тех, кто разрабатывает DLL.
Важное примечание: статью нужно читать последовательно. Примеры кода приводятся только как примеры, на каждом шаге (пункте) статьи код примеров добавляется новыми подробностями. Например, в самом начале статьи нет обработки ошибок, указываются "классические" способы (типа, использования
GetLastError
, соглашения sdtcall
и т.д.), которые по ходу статьи заменяются на более адекватные. Сделано так по той причине, чтобы "новые" ("необычные") конструкции не вызывали вопросов. Иначе при пришлось бы к каждому примеру вставлять примечание вида: "вот это обсуждается в том пункте ниже, а вот то - в этом вот". В любом случае в конце статьи есть ссылка на уже готовый код, написанный с учётом всего сказанного в статье. Можете просто его брать и использовать. А статья объясняет зачем и почему. Если вам не интересно "зачем и почему" - листайте в конец к заключению и ссылке на скачивание примера.20 мая 2018 г.
Дело о случайных вылетах
Один начинающий программист спросил, почему вылетает с Access Violation очень простой и, что интереснее, явно корректный код.
Примечание: слово "случайных" в заголовке означает, что вылет происходит в непредсказуемом месте - разном, в зависимости от приложения. Но в рамках одного конкретного приложения вылет всегда детерминирован (и, следовательно, воспроизводим).
Примечание: слово "случайных" в заголовке означает, что вылет происходит в непредсказуемом месте - разном, в зависимости от приложения. Но в рамках одного конкретного приложения вылет всегда детерминирован (и, следовательно, воспроизводим).
22 мая 2017 г.
Дело о зависании Delphi 7
Очередное детективное расследование. В этот раз мы разбираемся, почему Delphi 7 наглухо виснет при старте.
8 мая 2017 г.
Windows Error Reporting и Delphi
Windows Error Reporting (сокращённо: WER) — это набор технологий, встроенных в Windows, который собирает информацию о сбое в приложениях при их вылетах (а также о сбоях ядра) и отправляет её на сервера Microsoft. Разработчик программного обеспечения по этой информации может разработать и опубликовать соответствующее обновление. Затем конечный пользователь, отправляя отчёт, увидит, что для этой ошибки в программе доступно исправление, сможет скачать его и обновить программу.
В этой статье я хотел бы посмотреть на его историю, концепцию и как вы можете использовать его на практике для своих приложений Delphi (или, наоборот, не использовать).
В этой статье я хотел бы посмотреть на его историю, концепцию и как вы можете использовать его на практике для своих приложений Delphi (или, наоборот, не использовать).
1 декабря 2015 г.
Дело о неработающем ShowMessage
Новый "раздел" статей в блоге: показываем как можно применять возможности отладчика на практике.
19 февраля 2015 г.
Фреймы на стеке (стековые фреймы)
Эта статья обсуждает концепцию фреймов на стеке, что это такое, когда они создаются, когда они не создаются, на что они влияют, как они соотносятся со стеками вызовов.
5 января 2015 г.
Почему вам (никогда) не следует использовать ShellExecute и WinExec
В Интернете полно примеров кода, которые используют функцию
Почему?
ShellExecute
(реже - функцию WinExec
). Однако, суровая правда состоит в том, что вам никогда не нужно использовать эти функции.Почему?
5 марта 2014 г.
Когда CreateProcess завершается с ошибкой ERROR_SUCCESS
Не в первый раз с этим сталкиваюсь и всё время чешу голову. Решил сделать заметку, чтобы не забыть.
26 декабря 2012 г.
Подписаться на:
Сообщения
(
Atom
)