отладка утечки ресурсов в драйвере принтера - PullRequest
0 голосов
/ 22 апреля 2010

Я пытаюсь отладить утечку памяти в драйвере принтера. Я почти уверен, что это утечка ресурсов, а не просто утечка памяти, потому что анализ кучи с помощью! Heap -s в windbg не показывает никакого увеличения. Как я могу контролировать другие виды объектов с помощью windbg? Количество объектов GDI и открытых дескрипторов также не растет, так что бы это могло быть?

Симптом утечки памяти заключается в том, что частные байты увеличиваются до 180 МБ, а затем при печати возникают случайные проблемы.

1 Ответ

1 голос
/ 22 апреля 2010

Это могут быть прямые звонки на VirtualAlloc.Попробуйте изолировать тип памяти, используя !address -summary.А еще лучше, найдите копию vadump.exe из старого набора ресурсов.Это дает более читабельную разбивку.

Вы можете получить некоторые подсказки, если проанализировать результаты двух запусков команды WinDbg !vadump, а затем сбросить часть недавно выделенной оперативной памяти.Если у вас есть файлы символов и вы выгружаете ОЗУ с помощью команды dps, WinDbg отобразит совпадения символов для каждого DWORD.Другими словами, если у значения есть имя в файле символов, вы увидите его.Хорошим примером этого является дамп объектов C ++ с VTables.VTable имеет символ, так что вы увидите, какой он.

И последнее, но не менее важное: вы можете установить точку останова на VirtualAlloc и выгружать стек для каждого вызова.Даже при отсутствии строгого сравнения между распределениями и освобождениями, вы можете заметить интересный стек вызовов или размер выделения.Синтаксис точки останова для выгрузки стека и продолжения:

bp kernel32!virtualalloc "kb;g"

Кроме того, укажите точку останова на VirtualAllocEx.AFAIK, большинство выделенных процессом процессов VAD должны достигать точки останова, кроме тех, которые реализованы в ядре, таких как сопоставления файлов (CreateFileMapping / MapViewOfFile) и, возможно, LoadLibrary.

...