У меня есть решение Visual Studio 2010, которое содержит C # (управляемые), C ++ / CLI (неуправляемые) и чистые C ++ (собственные) проекты. Я хотел бы выполнить обнаружение утечки памяти во всех 3 проектах или, по крайней мере, вокруг собственного кода:
- Проект C # ссылается на неуправляемую dll (у меня есть доступ к общедоступным инструментам профилирования памяти .NET, поэтому на самом деле не проблема запустить профилирование памяти на нем).
- C ++ / CLI - это очень тонкая обертка вокруг собственной библиотеки C ++, поэтому мне не нужно ее профилировать (не особо об этом беспокоиться).
- Наиболее сложный для профилирования нативный код на C ++.
Я пытался использовать Intel Inspector XE 2011, но он просто слишком медленный ... делает простую вещь, такую как простая инициализация моей системы, и занимает так много времени, что я еще даже не видел ее завершенной. Когда я запускаю свою систему без IXE 2011, у меня уходит не более 10-15 секунд на инициализацию моей системы, в то время как с IXE мы позволяем ей работать часами и она не проходит инициализацию. Я пытался исключить некоторые библиотеки из профилирования, но это не имело никакого эффекта.
Я пытался использовать Визуальный детектор утечек, но после завершения запуска он сказал, что не может обнаружить утечки памяти. Я с подозрением относился к этому результату, поэтому намеренно поместил фрагмент кода в часто выполняемую функцию, чтобы гарантировать утечку памяти:
int* memoryLeak = new int;
Я снова побежал с VLD, но он выплевывал то же самое сообщение. Я рассматриваю возможность переопределения операторов new
/ delete
или даже просто malloc
/ free
, но я хотел убедиться, что я исчерпал все остальные опции, прежде чем углубляться в это.
Что я могу сделать, чтобы профилировать использование памяти моей родной библиотеки C ++ с Visual Studio 2010? Существуют ли другие инструменты или методы, которые могут работать (даже если они не интегрируются с VS2010)?