Особый контроль утечки памяти

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
visualman
Бывалый
Бывалый
 
Сообщения: 228
Зарегистрирован: 08.02.2002 (Пт) 19:06
Откуда: Russia

Особый контроль утечки памяти

Сообщение visualman » 27.08.2007 (Пн) 10:26

Я занимаюсь разработкой средства автоматизации тестирования. Сейчас я слежу за использованием памяти всем процессом тестируемой программы, и пришла в голову мысль, отслеживать память для каждого контрола на форме. Поскольку в программе достаточно много самописных (другими программерами фирмы) контролов, то такой подход думаю актуален. Подскажите, в каком направлении двигаться? Есть все hwnd, их классы, PID и всё, что можно было узнать о контролах. Всё, кроме занимаемой ими памяти.
Причиной ошибок в коде служит давление со стороны руководства и жесткие временные рамки, им установленные.

visualman
Бывалый
Бывалый
 
Сообщения: 228
Зарегистрирован: 08.02.2002 (Пт) 19:06
Откуда: Russia

Сообщение visualman » 27.08.2007 (Пн) 10:39

А память подтекает точно ))))
Причиной ошибок в коде служит давление со стороны руководства и жесткие временные рамки, им установленные.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 27.08.2007 (Пн) 11:20

IMHO не заниматься [Хакер]::Вырезано, а написать простейший контейнер в котором, по очереди протестить все контролы на предмет утечки памяти.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 27.08.2007 (Пн) 11:44

Гм... Перехватывать все *Alloc, *Free-функции и следить за балансом. Нет?

jangle
Даже криптованный мат на этом форуме запрещён. А откровенно-матерное слово с заменённой первой буквой - тем более.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

visualman
Бывалый
Бывалый
 
Сообщения: 228
Зарегистрирован: 08.02.2002 (Пт) 19:06
Откуда: Russia

Сообщение visualman » 27.08.2007 (Пн) 12:17

Вариант с контейнером отпадает. При переносе объекта из тестируемой проги в свой контейнер путём SetParent, прога ругается: Unexpected Error (вроде правильно написал)).

Allocate надо попробовать, но как я понимаю, это маршалинг, а тут я пока ламо.
Причиной ошибок в коде служит давление со стороны руководства и жесткие временные рамки, им установленные.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 27.08.2007 (Пн) 12:20

Не знаю каким образом маршалинг связан с функциями VirtualAlloc, VirtualFree, HeapAlloc, HeapFree, GlobalAlloc, GlobalFree и т.д.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.08.2007 (Пн) 15:46

Хакер писал(а):Гм... Перехватывать все *Alloc, *Free-функции и следить за балансом. Нет?

Ага, попробуй перехватить сишные malloc и free из статично прилинкованного рантайма ;-)
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 27.08.2007 (Пн) 15:48

Сишные функции ведь всё равно являются переходниками к системным?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.08.2007 (Пн) 16:05

Нет, там свой менеджер кучи.
Стекается к Virtual* наравне с Heap*.
Global* и Local* сами стекаются к Heap*.

Ещё не забудь про CoTaskMem* и Sys*String, раз на то пошло.
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 27.08.2007 (Пн) 16:17

Хакер
Ну да. Сишный менеджер кучи юзает системные Virtual***-функции, а мы их можем перехватить. Нет?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.08.2007 (Пн) 16:48

Угу, любая куча в итоге стекается к Virtual*
Теперь предположим, что мы их перехватили.
Что нам это дало?
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 27.08.2007 (Пн) 16:52

Нам это дало то, что мы можем следить за балансом, между выделяемой и освобождаемой памятью. Если в процессе многочасовой однообразной цикличной (именно такой) работы аллочится больше чем фричется, - мемори лик.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.08.2007 (Пн) 17:00

Вопрос не в том, чтобы сказать, есть ли утечка, а в том, где она.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 27.08.2007 (Пн) 17:02

Какого формата ответ на вопрос "Где?" устроит автора. Автор ведь понимает, что номер строчки и имя файла-исходника получить нереально.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.08.2007 (Пн) 17:19

"В каком контроле"
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 27.08.2007 (Пн) 18:07

А контролы у него во внешних ocx-ах?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

visualman
Бывалый
Бывалый
 
Сообщения: 228
Зарегистрирован: 08.02.2002 (Пт) 19:06
Откуда: Russia

Сообщение visualman » 28.08.2007 (Вт) 9:10

Автор отвечает: контролы в .ocx есть, но они так же есть в сорсах и мы, тестеры, не знаем, в каком варианте их прицепили к программе. Отдельное тестирование этих контролов не требуется, нужно тестить всю софтину.
Причиной ошибок в коде служит давление со стороны руководства и жесткие временные рамки, им установленные.

visualman
Бывалый
Бывалый
 
Сообщения: 228
Зарегистрирован: 08.02.2002 (Пт) 19:06
Откуда: Russia

Сообщение visualman » 28.08.2007 (Вт) 9:25

Ещё раз озвучу задачу: в сторонней программе нужно отследить утечки памяти не для всего процесса, а ДЛЯ КАЖДОГО КОНТРОЛА отдельно. CopyMemory не спасёт положение?

Я так делал для выбора пункта в SysTreeView32 по её тексту. Копировал структуру информации о каждой записи в свою переменную, там проверял и если текст совпадал, то слал мессадж на выделение этой записи. Вот та структура, в которую я CopyMemory делал, может её размер считать? Хотя я очень не уверен, что это та память. И вообще такой подход помоему полный бред ))))
Причиной ошибок в коде служит давление со стороны руководства и жесткие временные рамки, им установленные.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.08.2007 (Вт) 10:19

Собственно, когда эта тема только появилась, я сразу подумал, что visualman, в своей обычной манере, проигнорировал http://bbs.vbstreets.ru/viewtopic.php?t=33830 и окунулся в детский сад, ничего не понимая в вопросе. Но всё же решил сначала убедиться в этом.

Убедился. tag_warning

Поскольку для тебя, visualman, он второй, тема закрывается. Третий будет для тебя последним.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Раздел для Профессионалов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

    TopList  
cron