Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.04.2025, 14:21
Ответы с готовыми решениями:

Assertion failure
Господа программисты, помогите решить проблемму, постоянно вылетает ошибка при закрытии любого...

Ошибка: Socket Error #11001 или socket error #10051
Делаю простую проверку подключен к нету комп или нет procedure TForm1.Button1Click(Sender:...

Ошибка An error occured while attempting to initialize the Borland Database Engine (error $251E)
Достал нужную мне програмку , которую искал очень долго . Она написана то ли под Delphi 3.0 то ли...

11
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,197
21.04.2025, 16:23
Цитата Сообщение от Светлана95 Посмотреть сообщение
появляется куча ошибок Assertion Error, которые укаазывают на строку 437 в SafeMM - но непонятно, как это поможет найти ошибку.
assert придуман именно для выявления косяков программиста. Мои программы просто кишат ассёртами, это помогает избавляться от логических ошибок ещё на этапе альфы.
Цитата Сообщение от Светлана95 Посмотреть сообщение
Что делать с ошибками в программе, как их найти - и как добиться того, чтобы программа запускалась с менеджером памяти SafeMM без AssertionError (имею ввиду, как найти эти ошибки, а не отключить отображение ошибки)?
Надо добиться вылета по ассёрту при запуске программы под дебаггером, размотать стек вызовов и узнать, какой косяк его триггерит.

-------------
Цитата Сообщение от Светлана95 Посмотреть сообщение
У меня есть приложение на Delphi 7
Это довольно дерьмово. Успехов тебе.
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
22.04.2025, 01:11
Цитата Сообщение от Светлана95 Посмотреть сообщение
Что делать с ошибками в программе, как их найти
Рекомендую Эврику
Очень полезная штука для новичков и не только. Она конечно платная. Но у неё есть полнофункциональный Trial на 30 дней. За эти 30 дней "либо эмир помрёт, либо ишак". Если с помощью этого лучшего средства для поиска багов в программе вам не удастся их все найти, тогда лучше завязывать с этой программой или вообще с программированием.
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,329
22.04.2025, 08:54
Цитата Сообщение от northener Посмотреть сообщение
Рекомендую Эврику
ТС пишет, что использует её:
Цитата Сообщение от Светлана95 Посмотреть сообщение
EurekaLog + FastMM (Full Debug Mode) при часовом прогоне на моём компьютере ошибок не находят (кроме ошибок IdHttp в потоке - но это не моя вина, наверное).
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
Цитата Сообщение от Светлана95 Посмотреть сообщение
Я правильно понимаю, лицензия EurekaLog без ограничений по времени? Ограничение касается только возможности работы скомпилированной для клиентов версии с EurekaLog (не более 30 дней)?
Да.
Цитата Сообщение от AzAtom Посмотреть сообщение
ТС пишет, что использует её:
Не заметил, увы.
0
 Аватар для abit
867 / 526 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
23.04.2025, 01:59
Цитата Сообщение от Светлана95 Посмотреть сообщение
появляется куча ошибок Assertion Error, которые укаазывают на строку 437 в SafeMM - но непонятно, как это поможет найти ошибку.
а что там в этой строке то? какой тип операции хоть?
а вот у них там в FastMM есть FullDebugMode, его пробовали?
0
0 / 0 / 0
Регистрация: 21.04.2025
Сообщений: 4
23.04.2025, 14:26  [ТС]
FastMM (FullDebugMode) + EurekaLog показывает, что всё нормально.

SafeMM почему-то всё время ругается.
0
 Аватар для abit
867 / 526 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
23.04.2025, 22:35
Цитата Сообщение от Светлана95 Посмотреть сообщение
SafeMM почему-то всё время ругается.
на что ругается? можно строчки кода на которые он ругается или он просто кроет матом с междометиями и ничего конкретного?
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
Цитата Сообщение от Светлана95 Посмотреть сообщение
SafeMM почему-то всё время ругается.
Что значит "ругается"? Вы вдумчиво прочитали что он пишет?
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,329
25.04.2025, 10:10
Цитата Сообщение от Светлана95 Посмотреть сообщение
Ругается на строку 17 в самом модуле SafeMM.pas.
Прямо ругается матом или там есть вменяемый текст ошибки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.04.2025, 10:10
Помогаю со студенческими работами здесь

При компиляции выдает ошибку [Fatal Error] Unit4.pas(10): Internal error: SY576
При компиляции выдает ошибку Unit4.pas(10): Internal error: SY576 и выделяет строку ...

Ошибка: [dcc32 Error] Unit1.pas(150): E2029 '(' expected but '[' found и [dcc32 Error] Unit1.pas(188): E2035 N
2 таких ошибки повторяются в нескольких местах. Код совсем сухой и еще совсем не доделан. Но на...

Delphi XE8 idIMAP4 gmail и ошибка error connecting with ssl error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version nu
В чем может быть ошибка? ССЛ библиотек уже кучу перебрал Вроде по коду все норм: var msgcnt,...

Примеры использования Async Free (СОМ-порт) или Async Pro (СОМ-порт)
Здравствуйте! Скажите пожалуйста есть пример где используют Async Free (СОМ-порт) или Async Pro...

[Error] RLINK32: Error opening file "C:\kur\server\Project1.TLB"
RLINK32: Error opening file "C:\kur\server\Project1.TLB" - это ошибка, которую выдает при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru