Libcwd кітапханасы: C++ қолданбаларын түзету құралы
Libcwd
Libcwd кітапханасы – GCC-мен жасалған C++ бағдарламаларын қатесіздікке тексеруге арналған құрал. Ол жадты басқару, деректерге қолжеткізу және шығару мүмкіндіктерін ұсынады.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы 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-та сенімді жұмыс істейтінше дамытуға болады, сондай-ақ толыққанды libcwd қол жетімді болмаса да, басқа (POSIX) платформаларда қателік шығаруын пайдалануға болады – егер бұл платформаларда қателік шығару үшін жіптік қауіпсіздік қажет болмаса: екі немесе одан көп жіп бірдей 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.
Жөндеу ақпаратына жегу уақыты
Бұл ақпарат бастапқы файлды, жол нөмірін табу мүмкіндігін және функция атауларын қамтиды. Осының нәтижесінде, мысалы, белгілі бір функцияны кім шақырғанын көрсететін түзету шығысын жазуға немесе тіпті бұл функция күрделі үлгі болса да, ағымдағы функцияның атын басып шығаруға болады. Мысалы, PERSIST : PersistXML::serialize builtin<std::string>("M hostname", @0xbfc1f214) шақырылды.
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,
PERSIST : PersistXML::serialize builtin<std::string>("M hostname", @0xbfc1f214) is called.