Я разработчик крупной коммерческой программы, и я пытаюсь отследить конкретную утечку памяти в C ++. Я хотел бы использовать Visual Studio для поиска по всему допустимому адресному пространству моего процесса, но я не вижу, как эффективно выполнить этот поиск.
Мне известна документация команды .s здесь , но она не выполняет то, что мне нужно. Например, я на 100% уверен, что адрес 0xfdfd240 содержит значение 0x0f0e34a8. Я могу успешно использовать команду .s для поиска рядом с этим адресом, как это:
.s -d 0x0fdfd200 L256000000 0x0f0e34a8
Found match at
0xfdfd240
Но моя программа сделала много небольших выделений, которые оставили мне много маленьких несмежных участков памяти. Если я резервирую несколько тысяч байт, команда поиска завершается неудачно:
.s -d 0x0fd00000 L256000000 0x0f0e34a8
Memory location could not be read. Please specify a valid memory location.
Кроме того, похоже, что команда поиска больше не пытается искать вперед, когда находит свой первый неверный адрес, , даже если за ним есть действительные адреса .
.s -d 0x0f000000 L256000000 0x0f0e34a8
No match was found
Я смутно осознаю, что есть способ спросить у окон, какие диапазоны памяти действительны для данного процесса, поэтому я рассматриваю написание небольшой одноразовой программы для сбора этой информации, а затем для автоматизации серии команд поиска для Немедленное окно ... но кажется, что кто-то должен был иметь дело с этим раньше, и, должно быть, сделал что-то умнее.
Кроме того, я могу извлечь файл дампа запущенного процесса, так что если кто-нибудь может порекомендовать сторонние инструменты для подачи дампа в него, который обладает более мощной функцией поиска, которая также должна сработать.
Есть предложения?
Редактировать. Такое поведение наблюдается в VS2008SP1 и VS2010SP1.