------------ Дoбавленo в 00.39:
1nd1g0 писал(а):
с самоуничтожением после отработки (Mode = OnlyOnce)А сильно накладно по производительности такие вот суицидальные действия компонентов?

Ответов: 704
Рейтинг: 7
|
|||
Я выждал эту ошибку, и что Вы себе думаете? Да только я ее и видел после нажатия кнопки Ok (других не было, окно ошибки как и на скрине)! Никаких отчетов не создалось почему-то. [offtop]Вырвал часть волос на голове в порыве печали.[/offtop]
------------ Дoбавленo в 00.39: 1nd1g0 писал(а): с самоуничтожением после отработки (Mode = OnlyOnce)А сильно накладно по производительности такие вот суицидальные действия компонентов? ![]() |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Neo писал(а): Никаких отчетов не создалось почему-то.Скорее всего это произошло потому, что у Вас сама программа в себе перехватила исключение. Возможно, есть не известный (не документированный?) мне ключ командной строки, отключающий встроенную обработку исключений , но для надёжности я запускаю программу прямо под отладчиком и исключение гарантированно будет "обработано" правильно. Надеюсь, вы после этого ещё не меняли схему. Если нет, то научу, как узнать, где именно произошла ошибка. Сам я пользуюсь сразу несколькими отладчиками и несколькими анализаторами/декомпиляторами, но для Вас нашёл метод попроще ![]() Neo писал(а): Можно ли вопрос в разработке...На этот и предыдущие вопросы можно ответить только по результатам практических экспериментов. ![]() |
|||
карма: 1 |
|
Ответов: 704
Рейтинг: 7
|
|||
1nd1g0 писал(а): метод попроще![]() |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Neo, == Секретная техника HiAsm-кунг-фу: ==
== ![]() 0) Запоминаем адрес Runtime error at 000xxxxx (лидирующие нули запоминать не обязательно) 1) Открыть ту же схему (обязательно - без малейших изменений!), которая вылетала после компиляции (в идеале - запускать из HiAsm, дождаться вылета, запомнить ошибку и , не закрывая схемы провести манипуляции, описанные ниже) 2) Сервис - Компиляторы - Сами_знаете_какой_компилятор - Командная строка 3) Дописываете в конце ещё один ключик с приклееным (то есть без пробела, без лидирующих нулей) к нему адресом: "%fname%" "-U %opath%." -Q -Fxxxxx (Внимание! Теперь при компиляции среда удалит приложение из папки, а перенастроенный компилятор новое не создаст, не удивляйтесь) 4) Жмёте "Сохранить", убеждаетесь, что тот же компилятор выбран в настройках компиляции 5) Запускаете компиляцию и смотрите в панель "Отладка" 6) Видите там : ![]() hiНАЗВАНИЕ_ЭЛЕМЕНТА.pas(НОМЕР_СТРОКИ_В_ИСХОДНИКЕ) Target address found.
dtInteger(_Data, TDocItem(FItem)._prop_X); ^ 7) Открываем исходник компонента (например, по CTRL+F), если это не компонент, а библиотека, можно, конечно, посмотреть и туда, но дальнейшие пункты не помогут. 8) Ищем нужный номер строки (CTRL+G) 9) Ищем по строчкам выше указанной первую вида procedure THIИмяКомпонента._ТипТочки_НазваниеТочки; 10) Вот на точке с таким именем у Вас и вылезла проблема, для восстановления нормальной компиляции удалите -Fxxxxx из настроек компилятора. ![]() Больше информации даст только ключ компилятора -V, T[цензура] Debugger 5.5 и знания ассемблера ![]() Neo писал(а): Никаких отчетов не создалось почему-то.![]() Neo, если не уверены в твёрдой руке и зорком глазе, делаем мини-помощника (схема универсальная, рассчитана на извлечения адреса ошибки из системных и паскалевских окон, но под FPC пришлось бы немного подпилить):
|
|||
карма: 1 |
| ||
файлы: 1 | noerrors.png [22.8KB] [376] | ||
Голосовали: | Neo |
Ответов: 704
Рейтинг: 7
|
|||
1nd1g0, огромное спасибо за такую развернутую инструкцию!
Но у меня она не сработала. Видимо из-за другого типа ошибки, у меня пишет в отладчике только Target address no found (По памяти). Пробовал и с нулями и без них. У меня теперь уже ExceptionK in module - первые строки ошибки, а не Access Violation at address ------------ Дoбавленo в 17.44: И почему-то не понял как мини-помощника юзать. Ввел ему адрес, нажал оду и другую кнопку - открылась среда и ничего ![]() ------------ Дoбавленo в 17.45: Кстати, в окне отладки есть пару строк C:\Program Files\HiAsm\Elements\delphi\code\hiTCP_Server.pas(207) Warning: Variable 'st' might not have been initialized C:\Program Files\HiAsm\Elements\delphi\code\hiTCP_Server.pas(250) Warning: Variable 'st' might not have been initialized - это нормально? |
|||
карма: 0 |
|
Разработчик
Ответов: 26300
Рейтинг: 2146
|
|||
Neo писал(а): это нормально?Нормально. Просто предупреждение, что переменная может быть не инициализирована |
|||
карма: 22 |
|
Ответов: 704
Рейтинг: 7
|
|||
Протестировал тут на досуге МультикEX с OnlyOnce - откуда такие чудеса магические? С ним схема отрабатывает за 4 секунды в среднем, а без него (или с ним, но Standart) - 10+ секунд с неслабым подвисанием приложения?! Вызывал новым потоком в обеих случаях. Итераций одинаковое количество (считал по событию после завершения обработок). Это же недюжинный прирост к производительности на ровном месте! Где подвох?
------------ Дoбавленo в 21.33: Правда потоки (как и нужно было полагать) внутрь ставить - зло. Мультик убивается сразу после передачи данных параллельному потоку - соответственно потеря данных. Но без потоков даже лучше по скорости. А вот после мультика потоки работаю отлично. ------------ Дoбавленo в 21.39: Но в основную программу боюсь пока ставить. Чую, что эта скорость не берется ниоткуда... ![]() |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco писал(а): Нормально. Просто предупреждение, что переменная может быть не инициализирована |
|||
карма: 25 |
|
Ответов: 1841
Рейтинг: 370
|
|||
Интересный у Вас проект)
Посмотрев кусочки схем выложенные в этом топике, думаю что стоит всёже по лучше изучить пакет и по практиковать с экзотическими для вас элементами в небольших проектах, изучить поведение элементов, свойства... |
|||
карма: 1 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 4 раз(а), последний 2025-02-25 18:49:51 |
|||
карма: 0 |
|
Ответов: 1841
Рейтинг: 370
|
|||
[offtop]опять выкинуло
![]() |
|||
карма: 1 |
|
Ответов: 3889
Рейтинг: 362
|
|||
[offtop]Пока у меня не было доступа к сети, гляжу, обсуждение клонит в другое русло.[/offtop]
Neo писал(а): Видимо из-за другого типа ошибкиКакой тип ошибки, дословно? Я ориентировался на Neo писал(а): я ее и видел после нажатия кнопки Ok (других не было, окно ошибки как и на скрине)Neo писал(а): Target address no found А можно узнать полный адрес? Желательно - всю строку, что Вы прописывали, и скриншот ошибки, и саму программу без оптимизации EXE, про дампы промолчим. Такое бывает когда 1) отладку компиляцией запускали на схеме, отличающейся от первоначальной (мельчайшие изменения, например, забыли что-то сохранить перед запуском, потом открыли старую версию и пробовали отлаживать), естественно, адреса уже сменились. 2) ошибка произошла не в схеме (то есть не в Вашей программе), а, по вине Вашей программы (например, из-за путаницы с потоками, неправильно переданных данных и т.п.) в системных или сторонних библиотеках, естественно, адрес не будет найден - его заполнял не компилятор, не ему там и искать (искать системному отладчику т.к. кто и куда загрузит какую библиотеку компилятор знать не может). 3) Вы ввели адрес не из той строчки, часто их показывается два, один больше другого на 00400000 |
|||
карма: 1 |
|
Ответов: 704
Рейтинг: 7
|
|||
CriDos, поддерживаю, но Лень не дает этого сделать! Она, она, коварная! Да и производительность тоже не хочет делать кучу лишних действий при записи в лог. Дебагами пользуюсь при случае, но проблема в том, что ошибка не явная, а скрытая. А так, конечно, все новые схемочки проверяю отдельно.
------------ Дoбавленo в 12.59: 1nd1g0, да все та программа и той же ошибкой (картинка или звук там, как Вы писали). Удалил все скрины - ну ее. Буду методом тыка искать. В конце-концов появилось после UDP - буду копать возле них. А вот комментарии о такой магической производительности после МультикEX с OnlyOnce очень хотелось бы услышать ![]() ![]() |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Neo, ну, дело Ваше, навязывать помощь не буду, IRL мне за отладку и оптимизацию хотя бы деньги платят.
Что касается схем с самоуничтожением, рад, что Вам так понравилась идея, если покажете на простейшей схеме, как выясняете, что Neo писал(а): Скорость в разы больше |
|||
карма: 1 |
|
Ответов: 704
Рейтинг: 7
|
|||
1nd1g0 писал(а): IRL ![]() И постить сюда все подряд ошибки мне неудобно - я же деньги за это не плачу. Постараюсь сам разгрести, тем более, Вы подробно рассказали мне способ HiAsm-кунг-фу ![]() Схема моего теста ниже. Топорно, но быстро. ![]()
Брал за тест строковую операцию, т.к. с ними чаще работаю и именно они у меня тупят чаще ![]() ------------ Дoбавленo в 15.09: У меня разница по скорости в 2 раза на этой схеме. Если убрать стек - еще быстрее будет, но пока не от всех стеков могу избавиться в основной программе. |
|||
карма: 0 |
|