|
0 / 0 / 0
Регистрация: 21.04.2025
Сообщений: 4
|
|
Как найти ошибки в программе, которые портят память? Что такое Assertion Error в SafeMM и как искать ошибку?21.04.2025, 14:21. Показов 2242. Ответов 11
Метки нет (Все метки)
Добрый день!
У меня есть приложение на Delphi 7 - примерно 800 тысяч строк, приложение регулярно дорабатывается. Использую FastMM для работы с памятью. В целом работает нормально - но иногда возникают странные глюки у клиентов и невозможно понять, в чём дело. Подозрение на то, что какой-то код в приложении портит оперативную память. Но не могу найти, что за код, потому что ошибки возникают случайным образом. Что было сделано для решения проблемы: 1) Убраны все Hints и Warnings при компиляции приложения (было около 2000 штук). Исправлено несколько ошибок. 2) Включены опции Range Check и Overflow Check - причём не только у меня - но и в версии, распространяемой клиентам. Сразу в первые недели удалось найти около 10 ошибок и исправить. 3) Освобождение памяти Free заменено везде в программе на FreeAndNil (да, читала статьи GunSmoker про это). Тоже позволило исправить несколько ошибок. 4) Может, немного некрасивое и временное решение проблемы - но поправила FastMM4, чтобы при запросе на выделение памяти он выделял в 1,5 раза больше, чем нужно +150 байт сверху. В принципе, памяти у большинства клиентов хватает, а кому не хватает - сделана возможность вручную регулировать выделение памяти по формуле size = m * size0 + a (где m - мультипликатор, a - доп. байты). Например, если m = 1.0, a = 0 - тогда лишняя память не выделяется. Если m = 1.5, а = 200 - то на каждый блок памяти выделяется в 1,5 раза больше, чем нужно + 200 байт. Остроту проблемы это временно сняло. Но однако, проблемы и глюки всё равно остались, хоть и стало их в 5 раз меньше. Хочется найти ошибки и их исправить. Полагаю, ошибки могут быть не только в моём коде, но и в VCL и в Indy - в частности, EurekaLog ругается на работу IdHttp в потоке - а он мне нужен, чтобы читать содержимое нужной веб-страницы с Интернета. EurekaLog + FastMM (Full Debug Mode) при часовом прогоне на моём компьютере ошибок не находят (кроме ошибок IdHttp в потоке - но это не моя вина, наверное). Если же запустить программу под SafeMM менеджером памяти - появляется куча ошибок Assertion Error, которые укаазывают на строку 437 в SafeMM - но непонятно, как это поможет найти ошибку. Если убрать IdHttp - всё равно ошибки AssertionError остаются. Вопрос такой - что делать с Assertion Error, где искать ошибки, чтобы их не было? Ведь не показывается адрес памяти, где ошибка, просто какой-то непонятный Assertion Error. Что делать с ошибками в программе, как их найти - и как добиться того, чтобы программа запускалась с менеджером памяти SafeMM без AssertionError (имею ввиду, как найти эти ошибки, а не отключить отображение ошибки)?
0
|
|
| 21.04.2025, 14:21 | |
|
Ответы с готовыми решениями:
11
Assertion failure Ошибка: Socket Error #11001 или socket error #10051 Ошибка An error occured while attempting to initialize the Borland Database Engine (error $251E) |
|
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,197
|
||||
| 21.04.2025, 16:23 | ||||
|
-------------
0
|
||||
|
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
|
||
| 22.04.2025, 01:11 | ||
|
Очень полезная штука для новичков и не только. Она конечно платная. Но у неё есть полнофункциональный Trial на 30 дней. За эти 30 дней "либо эмир помрёт, либо ишак". Если с помощью этого лучшего средства для поиска багов в программе вам не удастся их все найти, тогда лучше завязывать с этой программой или вообще с программированием.
0
|
||
|
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,329
|
|
| 22.04.2025, 08:54 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 21.04.2025
Сообщений: 4
|
|
| 22.04.2025, 12:59 [ТС] | |
|
Да, без EurekaLog совсем труба была бы. Но он не смог выловить все ошибки.
Я правильно понимаю, лицензия EurekaLog без ограничений по времени? Ограничение касается только возможности работы скомпилированной для клиентов версии с EurekaLog (не более 30 дней)?
0
|
|
|
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
|
|
| 23.04.2025, 01:28 | |
|
0
|
|
|
867 / 526 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
|
||
| 23.04.2025, 01:59 | ||
|
а вот у них там в FastMM есть FullDebugMode, его пробовали?
0
|
||
|
0 / 0 / 0
Регистрация: 21.04.2025
Сообщений: 4
|
|
| 23.04.2025, 14:26 [ТС] | |
|
FastMM (FullDebugMode) + EurekaLog показывает, что всё нормально.
SafeMM почему-то всё время ругается.
0
|
|
|
867 / 526 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
|
||
| 23.04.2025, 22:35 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 21.04.2025
Сообщений: 4
|
|
| 24.04.2025, 18:05 [ТС] | |
|
Ругается на строку 17 в самом модуле SafeMM.pas. Не на мой код. Если бы на мой код сразу бы стало понятно где ошибка.
Добавлено через 42 минуты точнее 437. уже от этой авральной работы просто голова пухнет, косяки идут
0
|
|
|
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
|
|
| 25.04.2025, 02:09 | |
|
0
|
|
|
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,329
|
|
| 25.04.2025, 10:10 | |
|
0
|
|
| 25.04.2025, 10:10 | |
|
Помогаю со студенческими работами здесь
12
При компиляции выдает ошибку [Fatal Error] Unit4.pas(10): Internal error: SY576 Ошибка: [dcc32 Error] Unit1.pas(150): E2029 '(' expected but '[' found и [dcc32 Error] Unit1.pas(188): E2035 N Delphi XE8 idIMAP4 gmail и ошибка error connecting with ssl error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version nu Примеры использования Async Free (СОМ-порт) или Async Pro (СОМ-порт) [Error] RLINK32: Error opening file "C:\kur\server\Project1.TLB" Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|