Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Утечка Device Context + EurekaLog
|
|||
|---|---|---|---|
|
#18+
Добрый день! Имеется приложение Delphi использующее стороннюю библиотеку CadVCL для рисования чертежей. В данной библиотеке происходит утечка ресурса DeviceContext - приводящая к краху приложения. Я с помощью Win Hook перехватываю функции WinAPI создания/удаления DC. Для выявления места утечки, я добавил в список созданных DC стек вызова (использую Eurekalog) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. У тут начался треш - программа стала не работоспособна - очень медленно работает. Вопрос: 1. Как оптимизировать время получения стека (можно с минимальной информацией) с помощью Eurekalog (вызовов на создание DC сотни) 2. Есть ли другой способ выявления утечки DC (кроме сторонних/платных профайлеров типа AQTime) С Уважением, Александр. P.S. Исходники библиотеки CADVCL естественно есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2021, 13:01 |
|
||
|
Утечка Device Context + EurekaLog
|
|||
|---|---|---|---|
|
#18+
Lisichkin Как оптимизировать время получения стека ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2021, 13:06 |
|
||
|
Утечка Device Context + EurekaLog
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Спасибо! Заработало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2021, 14:26 |
|
||
|
Утечка Device Context + EurekaLog
|
|||
|---|---|---|---|
|
#18+
Нет не заработало - стек показывается не для того состояния, когда был вызван создание DC, а для того когда вызывается Stack.Build :( Нужна помощь знатоков EurekaLog Сохраняю две переменные: Result := TStackItem.Create; Result.FStack := GetTracer(TracerRawJCL); // TEurekaBaseStackList Result.FCurrentInstruction := Result.FStack.GetCurrentInstruction; // Pointer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2021, 15:03 |
|
||
|
Утечка Device Context + EurekaLog
|
|||
|---|---|---|---|
|
#18+
gunsmoker - Как самый большой специалист по Eurekalog, как нужно поступить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2021, 16:21 |
|
||
|
Утечка Device Context + EurekaLog
|
|||
|---|---|---|---|
|
#18+
Lisichkin Нет не заработало - стек показывается не для того состояния, когда был вызван создание DC, а для того когда вызывается Stack.Build :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2021, 19:22 |
|
||
|
Утечка Device Context + EurekaLog
|
|||
|---|---|---|---|
|
#18+
Строить стек - это надо время. Просмотреть все адреса, каждый проверить их на допустимость - а это вызовы в ядро, между прочим. Медленно это. Особливо, если ещё и отладочную инфу искать. Если создавать стек на каждый чих (читай: операцию рисования с DC) - само собой, программа будет очень медленно работать. EurekaLog - это трейсер исключений (штуки, которые происходят редко) и она не очень заточена под тыщу вызовов в секунду. В простейшем случае - сделайте тупо дамп стека (ну т.е. AllocMem + Move(ESP, Dump)). Это быстро, т.к. разбора стека не будет. Как нашли утечку - пробегитесь по ассоциированному дампу с GetLocationInfoStr(адрес_в_дампе). Там куча мусора будет, но ручками можно разобрать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2021, 19:51 |
|
||
|
Утечка Device Context + EurekaLog
|
|||
|---|---|---|---|
|
#18+
Для начала весь стэк вообще не нужен, достаточно определить адрес, где вызывается утекающий хэндл. На второй стадии теда можно просто воткнуть точку останова в отладчике и смотреть стэк и всё остальное. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2021, 22:12 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40078721&tid=2037243]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
327ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 280ms |
| total: | 713ms |

| 0 / 0 |
