Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Libcwd – это библиотека C++, разработанная Карло Вудом, для добавления поддержки отладки во время выполнения приложений на C++, особенно для кода, созданного с использованием GNU Compiler Collection. Функциональность, предоставляемая библиотекой, можно разделить на три категории:
Libcwd is a C++ library, written by Carlo Wood, to add run time debugging support for C++ applications, particularly for code developed with the GNU Compiler Collection. The functionality that the library adds to an application can be divided into three categories:
Отладочный вывод на основе ostream. Доступ к отладочной информации во время выполнения. Доступ к управлению выделением памяти во время выполнения.
Ostream based debug output. Run time access to debug information. Run time access to memory allocation administration.
Поддерживаемые платформы
Хотя сам библиотечный код стремится строго соответствовать ISO C++ и POSIX, насколько это возможно, для достижения пунктов 2 и 3 требуется специализированный код, специфичный для архитектуры, на которой работает приложение. Libcwd намеренно ограничивается узкой архитектурой по этой причине: он должен быть скомпилирован компилятором GNU и требует, чтобы объектный код был 32- или 64-битным ELF, а сгенерированная компилятором информация для отладки – DWARF 2. Компиляция libcwd приводит к созданию двух библиотек: потокобезопасной (libcwd r) и версии (libcwd) без поддержки потоков. Потокобезопасная версия зависит от ещё большего числа архитектурно-специфичных деталей (в частности, от библиотеки GNU C). В результате, полнофункциональный libcwd в основном подходит только для разработки на платформах Linux. Однако libcwd можно сконфигурировать так, чтобы отключить поддержку потоков, отладку выделения памяти и/или чтение информации отладки ELF и DWARF 2, оставив только поддержку вывода отладочной информации в ostream. Таким образом, его можно использовать для разработки приложения на Linux до достижения стабильности, и при этом сохранять вывод отладочной информации на других (POSIX) платформах, даже если полноценный libcwd там недоступен, при условии, что потокобезопасность не требуется для вывода отладочной информации на этих платформах: два или более потока, одновременно записывающих отладочный вывод в один и тот же ostream, могут привести к хаотичному выводу, когда начало одной строки оказывается в середине другой, при отсутствии поддержки потоков.
Although the library code itself attempts to be strictly ISO C++, and conform to POSIX as much as possible, in order to achieve points 2 and 3, rather specialized code is needed, specific to the architecture the application runs on. Libcwd restricts itself to a narrow architecture for this reason: It has to be compiled with the GNU compiler, and demands the object code to be 32 or 64 bits ELF and the compiler generated debug information to be DWARF 2. Compiling libcwd results in two libraries: one that is thread safe (libcwd r) and a version (libcwd) without thread support. The thread safe version depends on even more architecture specific details (namely, the GNU C library). As a result, a full featured libcwd is basically only suitable for development on Linux platforms. However, libcwd may be configured to drop thread support, memory allocation debugging and/or reading the ELF and DWARF 2 debugging information—until only the ostream debug output support is left. This way one can use it to develop an application on linux until it is robust, and still have the debug output on other (POSIX) platforms, even though a full fledged libcwd isn't available there—provided no thread safety is needed for the debug output on those platforms: two or more threads writing debug output to the same ostream might cause a rather messy output where the output of one line starts in the middle of another, without thread support.
Доступ к информации о отладке в режиме выполнения
Эта информация включает возможность определения файла, номера строки и имени функции. В результате, например, можно создавать отладочный вывод, который показывает, какая функция является вызывающей для данной функции, или выводить имя текущей функции, даже если это сложный шаблон. Например,
This information includes the possibility to look up source file and line number locations, and function names. As a result, it is for example possible to write debug output that prints who the caller is of a given function, or to print the name of the current function, even if that function is a complex template. For example,