powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / EurekaLog - Access violation in module ecc32.exe
18 сообщений из 18, страница 1 из 1
EurekaLog - Access violation in module ecc32.exe
    #40128132
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
У нас в компании процесс работы устроен так, что EurekaLog не подключена к проекту Delphi, а внедряется в исполняемый файл с помощью события пост обработки, командой:
ecc32.exe --el_nostats --el_alter_exe"XXX.dproj;XXX.exe" --el_config"Release.eof"

В файле Release.eof параметры
InjectCode=1
InjectInfo=1

это вызывает добавление в релизный код не только кода обработки ошибок EurekaLog, но и отладочную информацию, что величивает размер exe файла.
У нас кроме исполняемого файла (exe) выкладывается так же файл с отладочной информацией (tds), и получается что отладочная информация дублируется - в exe и в tds файле.

Я изменил Release.eof файл изменив два параметра:
InjectInfo=0
dpTD32=1

При выполнении ecc32.exe с новым файлом конфигурации я получаю ошибку:
Access violation at address 006ED913 in module 'ecc32.exe'. Read of address 00000008

Так как у меня Full Source Code, то я скомпилировал ecc32 и запустил под отладкой:
Ошибка происходит в модуле ECompilerOutputEL8 в процедуре SaveUnit:
Код: pascal
1.
2.
3.
4.
5.
    // Next, write array of units as array of fixed size structs
    .....
    for X := 0 to AUnitList.Count - 1 do

А AUnitList = nil



Как мне получить желаемое - собранный exe файл с кодом обработки ошибок EurekaLog но с отладочной информацией вне exe - в tds?

P.S.
С InjectInfo=1 ошибки не возникает

C уважением,
Лисичкин Александр
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128176
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChangeLogEurekaLog 7.9 update 4 (7.9.4.0), 25 May 2021
...
6. Fixed: Access violation in ecc32 when injection of debug info is disabled
...
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128312
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ.
Хотел бы уточнить:
Судя по документации EurekaLog https://www.eurekalog.com/help/eurekalog/index.php?debug_information_page.php
Отладочная информация может сохраняться отдельно от исполняемого файла только в elsym.
Только для версии EurekaLog 7.7.8.103 (которую я использую) программа Settings Editor в закладке Debug Information не содержит переключателя "Store all names externally", хотя в исходниках расширение elsym есть.
Плюс на странице https://www.eurekalog.com/showchangelog_delphi.php указано:
EurekaLog 7.6 (7.6.0.0), 20-July-2017
9. Added: New option to stip all string names from debug information and store it in external file

Могу ли я в своей версии EurekaLog хранить отладочную информацию в elsym файле - какой параметр в eof за это отвечает?
Если нет - то начиная с какой версии это поддерживается ?
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128353
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мыж программисты :(
На основании исходников, я определил, что это параметр ExternanNames=1

release.eof
ExternanNames=1
InjectInfo=0
ecc32.exe отработал без ошибок, но при обработке искусственной ошибки call stack не содержит информации о строках проекта.
Что я делаю не так ??

P.S. .elsym файл я поместил рядом с .exe
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128439
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lisichkin
Отладочная информация может сохраняться отдельно от исполняемого файла только в elsym

Нет, это совершенно разные настройки.

1. Если внедрение отладочной информации отключено ("Add debug information" = False), то опция "Store all names externally" ничего делать не будет.
2. Если внедрение отладочной информации включено ("Add debug information" = True), то отладочная информация внедряться будет в любом случае. Но без "Store all names externally" внедряться будет вообще всё, а с "Store all names externally" - только смещения, без текстовых имён. Текстовые/читабельные имена будут сохранены во внешний файл .elsym.

Эта опция в основном предназначена для защиты программ от взлома.

Lisichkin
Для версии EurekaLog 7.7.8.103 (которую я использую) программа Settings Editor в закладке Debug Information не содержит переключателя "Store all names externally"

Это ложь. См. скриншот.

Lisichkin
при обработке искусственной ошибки call stack не содержит информации о строках проекта

У вас отключена отладочная информация. Да, формально "Store all names externally" создала файл с именами, но приложить эти имена не к чему, т.к. отладочная информация отключена.

Вы чего сделать-то хотите?
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128469
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я хочу вынести отладочную информацию во внешний файл (tds), так что бы при возникновении ошибки и формировании call stack, стек формировался с человеко читаемой информацией из tds фала.
Так работает JCL, беря информацию из jdbg
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128474
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128484
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так а внешний файл-то вам зачем? Для каких целей?

Я вот не понял, причём тут TDS:
1. JCL берёт отладочную инфу из JDBG - своего формата.
2. Но так и EurekaLog тоже берёт инфу из своего формата.
Если вы хотите сделать внешний файл, то включайте "Include debug information" и "Store all names externally". Будет вам .elsym внешний.

Полностью отключить отладочную информацию нельзя, поскольку информация о границах функций используется для проверки стека. Нет информации = нет стека. Выгружаются только имена, таким образом стек построить можно, но без имён.

P.S. У вас скриншот не от 7.7.8.103, а от более старой версии.
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128487
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторУ вас скриншот не от 7.7.8.103, а от более старой версии.
Возможно - раньше стояла версия 7.4.9 - ставил поверх, может и получил что есть :(

В процессе разработки формируется файл размером 52,5 Mb. После добавления отладочной информации - получается 68,1 Mb.
Файл лежит на сетевой шаре - и пользователи жалуются на долгий запуск.
Аналитики создали задачу - исследование, как добиться ускорения.
Вот я и смотрю варианты как уменьшить exe.

P.S. с ExternanNames=1 получил размер 62,1 маловато будет
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128490
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получается что лучший вариант - это маленький, инсталлятор (копировщик на локальный диск).
Но руководство не очень одобряет эту идею, то ли из безопасности то ли не знаю по чему :(
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128493
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну приехали.

Во-первых, к размеру .exe файла это никакого отношения не имеет. При запуске файла он не загружается в память целиком: файл только проецируется, а читается в память только по мере обращения.

Во-вторых, отладочная информация грузится в память при старте. Сделано это для того, чтобы при возникновении исключения она была бы уже доступной для создания стека/отчёта. Таким образом, выгружать её в отдельный файл нет смысла: грузить её из .exe или из внешнего файла - без разницы.

Если тормоза вызваны загрузкой отладочной инфы - отключите сжатие и не создавайте .elsym. Тогда загрузка будет максимально быстрой, т.к. инфа будет храниться в готовом виде.

У вас проверки памяти включены? Если да, то вот ещё потенциальное место для задержек, если у вас много операций с памятью делается.

Если потоки создаются/уничтожаются в огромных количествах - ещё одно место.

Ну и, конечно, миллионы скрытых исключений.

Всё остальное - это не от EurekaLog. Тут надо профайлером смотреть.
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128510
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lisichkin, пользователи эту программу по сто раз на дню запускают? Сеть какая?
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128511
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker
Во-первых, к размеру .exe файла это никакого отношения не имеет. При запуске файла он не загружается в память целиком: файл только проецируется, а читается в память только по мере обращения.
Ты видел это
Lisichkin
Файл лежит на сетевой шаре
? Разве система не копирует предварительно файл на локальную машину?
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128513
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, не копирует. По умолчанию, я имею в виду. Чтобы она копировала - надо ручками у exe поставить флаг IMAGE_FILE_NET_RUN_FROM_SWAP.
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128516
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за советы!

Да, я понимаю что тормоза могут возникать из-за разных вещей - потоки, подключение к БД и т.п, но поверите перетащить на компьютер с сетевого диска по VPN 60 с гаком мега байт это занимает много времени.
К примеру я прошлым летом на удаленке работал по GPS модему в деревне. Запуск приложения занимал минуты две-две с половиной.
Когда у нас провели оптоволокно - запуск (время от от щелчка по ярлыку до появления окна логина) сократился до 10-15 секунд.
Да приложение тяжелое - Oracle/DevExpress и т.п. :(
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128518
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпользователи эту программу по сто раз на дню запускают? Сеть какая?
Удаленка - VPN

авторIMAGE_FILE_NET_RUN_FROM_SWAP
У копирования exe в swap есть особенность. Если долгое время не перезагружаться/выключаться(что нормально для ноутбуков), swap виндовый переполняется, и программа перестает запускаться с ошибкой - "недостаточно ресурсов"(точный текст ошибки не помню).
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128534
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы не понимаете, что делает флаг IMAGE_FILE_NET_RUN_FROM_SWAP. Этот флаг просит Windows загрузить .exe файл в память целиком, если он запущен с сетевого пути. Файл подкачки здесь совершенно не при чём. Под "SWAP" здесь понимается ОЗУ, своп-файл же будет использоваться только при нехватке ОЗУ. Это так называемая "memory backed by swap".

Соответственно, если этот флаг не указан (по умолчанию), то файл .exe не грузится в память целиком. Он грузится только по мере необходимости. Поэтому не имеет значения, какого размера он будет. Вы можете легко это проверить, добавив в ресурсы .exe какой-нибудь архив этак на 700 мегабайт. Ваш 760 мб файл будет загружаться с той же скоростью что и 60 мб файл.

У вас проблема не с размером файла, а с тем, что этот файл делает при запуске.
...
Рейтинг: 0 / 0
EurekaLog - Access violation in module ecc32.exe
    #40128539
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, вот ещё - антивирус. Вот ему же надо проверить файл на вирусы перед запуском. Соответственно, он прочитает файл целиком. Тогда да, размер будет иметь значение.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / EurekaLog - Access violation in module ecc32.exe
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]