Введение
Программа отладки памяти PurifyPlus — это программа отладки памяти, используемая разработчиками программного обеспечения для выявления ошибок доступа к памяти в программах, особенно написанных на C или C++. Она была первоначально разработана Ридом Гастингсом в компании Pure Software. Позже Pure Software объединилась с Atria Software, образовав Pure Atria Software, которая впоследствии была приобретена Rational Software, затем IBM, а 31 декабря 2014 года продана компании UNICOM Systems, Inc. PurifyPlus функционально аналогична другим отладчикам памяти, таким как Insure++, Valgrind и BoundsChecker.
PurifyPlus is a memory debugger program used by software developers to detect memory access errors in programs, especially those written in C or C++. It was originally written by Reed Hastings of Pure Software. Pure Software later merged with Atria Software to form Pure Atria Software, which in turn was later acquired by Rational Software, which in turn was acquired by IBM, and then divested to UNICOM Systems, Inc. on Dec 31, 2014. It is functionally similar to other memory debuggers, such as Insure++, Valgrind and BoundsChecker.
Обзор
PurifyPlus обеспечивает динамическую верификацию – процесс, при котором программа обнаруживает ошибки, возникающие во время выполнения, аналогично отладчику. Статическая верификация, или статический анализ кода, напротив, предполагает обнаружение ошибок в исходном коде без его компиляции или запуска, исключительно путем выявления логических противоречий. Проверка типов компилятором C является примером статической верификации. При линковке программы с PurifyPlus, исправленный код верификации автоматически вставляется в исполняемый файл путем разбора и добавления к объектному коду, включая библиотеки. Таким образом, при возникновении ошибки памяти, программа выводит точное местоположение ошибки, адрес памяти и другую релевантную информацию. PurifyPlus также обнаруживает утечки памяти. По умолчанию, отчет об утечках генерируется при завершении программы, но его также можно создать, вызвав API обнаружения утечек PurifyPlus из инструментаризованного приложения. Ошибки, обнаруживаемые PurifyPlus, включают чтение и запись за границы массива, попытки доступа к невыделенной памяти, освобождение невыделенной памяти (обычно из-за повторного освобождения одной и той же памяти), а также утечки памяти (выделенная память без ссылок-указателей). Большинство этих ошибок не являются критическими (по крайней мере, не в месте их возникновения), и часто при простом запуске программы их невозможно обнаружить, кроме как по некорректному поведению программы. Поэтому PurifyPlus помогает обнаруживать эти ошибки и точно указывать программисту место их возникновения. Поскольку PurifyPlus работает путем инструментаризации всего объектного кода, он обнаруживает ошибки, возникающие внутри сторонних или системных библиотек. Эти ошибки часто вызваны передачей программистом неверных аргументов в вызовы библиотек или непониманием протоколов освобождения структур данных, используемых библиотеками. Как правило, это самые сложные ошибки для поиска и исправления.
Отличия от традиционных отладчиков
Способность обнаруживать некритические ошибки – ключевое отличие PurifyPlus и подобных ему программ от обычных отладчиков. В отличие от них, отладчики обычно позволяют программисту быстро находить причины критических ошибок, таких как аварийное завершение программы из-за разыменования нулевого указателя, но не помогают выявлять некритические ошибки памяти. Отладчики полезны для задач, для которых PurifyPlus не предназначен, например, для пошагового выполнения кода или ручной проверки памяти программы в определенный момент исполнения. Иными словами, эти инструменты могут дополнять друг друга в руках опытного разработчика. PurifyPlus также включает в себя другие функции, такие как высокопроизводительные точки останова, которые полезны при использовании отладчика. Важно отметить, что PurifyPlus наиболее эффективен в языках программирования, где управление памятью остается за программистом. Следовательно, в Java, Lisp или Visual Basic, например, автоматическое управление памятью снижает вероятность утечек памяти. Однако в этих языках утечки все же возможны: ненужные ссылки на объекты препятствуют перераспределению памяти. IBM предлагает продукт Rational Application Developer для выявления подобных ошибок.
Поддерживаемые платформы C/C++
Операционная система Архитектуры процессоров Версии операционной системы Компиляторы Solaris Sun UltraSPARC Solaris 11 base – 11.4 Solaris 10 base – U11 Sun C/C++ 5.8 – 5.15 GNU gcc/g++ 4 и 5 AMD64 Intel 64 Solaris 11 base – 11.4 Solaris 10 U6 – U11 Sun C/C++ 5.8 – 5.15 GNU gcc/g++ 4 – 8 Linux Intel IA 32 RHEL 8 (Server/Desktop) base – 8.3 RHEL 7 (Server/Desktop) base – 7.9 RHEL 6 (Server/Desktop) base – 6.10 SLES 12 base – SP4 SLES 11 base – SP3 GNU gcc/g++ 4 – 8 Intel icc 11.0 – 11.1 AMD64 Intel 64 RHEL 8 (Server/Desktop) base – 8.3 RHEL 7 (Server/Desktop) base – 7.9 RHEL 6 (Server/Desktop) base – 6.10 SLES 12 base – SP4 SLES 11 base – SP3 GNU gcc/g++ 4 – 8 Intel icc 11.0 – 11.1 Windows Intel IA 32 Intel 64 AMD 64 Microsoft Windows 10 base – 21H1 Microsoft Windows 8 base – 8.1 Microsoft Windows Server 2019 Standard, Data Center Microsoft Windows Server 2016 Standard, Data Center Microsoft Windows Server 2012 Foundation, Essential, Standard, Data Center Microsoft Windows Server 2008 Enterprise, Standard, Data Center, base – SP2 Microsoft Windows Server 2008 R2 Foundation, Enterprise, Standard, Data Center, base – SP1 Visual Studio 2010 – 2019
Поддерживаемые платформы Java/.NET
Платформа Тип сбора данных Среда исполнения Windows C/C++ (неуправляемый код) сбор данных Microsoft Visual Studio 2010–2019 Сбор данных об охвате кода Java IBM JRE 5–8 SUN JRE 1.5–1.8 Сбор данных .NET (управляемый код) .NET Framework 3.0–4.5, используемый с Microsoft Visual Studio 2010–2019.