LLDB — зневаджувач, заснований на технологіях проекту LLVM. LLDB являє собою інфраструктуру для організації зневадження застосунків і складається з набору модулів і бібліотек, які використовують такі підсистеми LLVM як API для дизасемблювання, Clang AST (Abstract Syntax Tree), парсер виразів, генератор коду і JIT-компілятор. Підтримується зневадження програм на мовах C, Objective-C і C++.
Початковий код поширюються під BSD-подібною ліцензією.
LLDB дозволяє зневаджувати багатонитеві програми, дизасемблювати машинний код для архітектур i386, x86-64 і ARM, здійснювати трекінг поділюваних бібліотек, використовувати декілька видів точок зупину (за заданим символом, за рядком у початкових текстах, за С++ іменами, за межами входження в модулі) та автоматизувати роботу за допомогою скриптів.
У порівнянні з GDB зневаджувач LLDB відрізняється значно більшою швидкодією при зневадженні програм великого розміру.
Цілі проекту
- Можливість обробки "важких випадків", таких як розбір виразів на мові C++, обробка перевантаження операторів, робота з шаблонами, зневадження багатонитевих програм та інші нетривіальні сценарії зневадження
- Створення набору бібліотек для інтегрованих середовищ розробки, набору утиліт для роботи в командному рядку та аналітичних інструментів
- Висока ефективність використання пам'яті при зневадженні
- Розширюваність, можливість підключення плаґінів і скриптів на мові Python для автоматизації виконання рутинних операцій
- Повторне використання існуючих технологій компіляторів, там де це має сенс
- Первинна підтримка зневадження багатонитевих програм та мов C, Objective-C і C++
- Легка адаптація для підтримки різних платформ
- Підготовка бази для подальших досліджень та інновацій в галузі зневадження програм.
Базові можливості
- Реалізація у вигляді плагінів:
- Парсери об'єктних файлів, зараз підтримуються формати Mach-O (32/64-bit) і ELF (32-bit);
- Парсери контейнерів об'єктів для виділення об'єктних файлів, об'єднаних в єдиний архів. Підтримуються універсальні Mach-O-файли й BSD-архіви;
- Парсери зневаджувальної інформації, підтримуються таблиці символів DWARF і Mach-O;
- Плагіни для збору зневаджувальних символів з різних зовнішніх джерел;
- Плагіни для дизасемблювання коду для різних архітектур.
- Згенеровані за допомогою SWIG скрипти, що дозволяють отримати коду мовою Python доступ до керуючого зневаджувального API;
- Серверний процес debugserver, що дозволяє організувати зневадження коду на віддаленому сервері
- Зневаджувач, що працює в режимі командного рядка
- API для використання можливостей системи в сторонніх проектах.
Виноски
Посилання