В последнее время я интенсивно использую
Это будет выглядеть примерно так при запуске LLDB с двоичным файлом или при подключении к нему:
Если вы введете lldbinitcmdsего, он перечислит все новые команды, которые были введены в этот скрипт, что сделает отладку сносной и визуально приятной.
Одна функция, которую мне не хватает в LLDB, которая присутствует в WinDBG, - это возможность использовать имена модулей в точках останова со смещением, например, bp addresslib+1EE6где addresslib.dllнаходится загруженный модуль. Способ использования смещений в LLDB заключается в получении базового адреса модулей и последующем добавлении смещения. Это привело бы к следующему:
Это становится утомительным. Поэтому я подумал, почему бы не добавить поддержку lldbinit.py имен модулей? Идея довольно тривиальная:
1- Получить имя модуля из ввода.
2- Получить список загруженных модулей.
3- Фильтровать список с именем модуля и вернуть его базовый адрес.
Я начал с команды bpt, которая находится в функции cmd_bpt(). Ввод будет доступен в command параметре, который передается evaluate()для анализа. Первым действием, которое я сделал, было получение списка загруженных модулей:
Чтобы получить текущий контекст выполнения, его следует передать в cmd_bpt() соответствии с
Далее идет функция, которая фильтрует и возвращает базовый адрес модуля плюс его смещение:
Это должно быть само за себя. Он вернет окончательное выражение, которое состоит из базового адреса модуля плюс смещение (например 0x00007fff50c2a000+0x23351), возвращаемое из ввода, например audiotoolboxcore+0x23351.
Чтобы собрать вещи вместе, cmd_bpt() становится:
Также требуются декларации, такие как импорт shlexи определение по loaded_mods всему миру.
Ницца.
Вывод
Сложные инструменты, такие как LLDB, могут снизить производительность, будучи утомительными, особенно с их подробной структурой команд. При условии, что можно использовать сочетания клавиш, некоторые другие аспекты все еще утомительны. Люди, которые помогают делать такие инструменты немного менее сложными и более приятными, всегда ценятся.
Источник:
Ссылка скрыта от гостей
для отладки всех вещей в macOS, таких как WebKit и системные демоны. Исходя из фона WinDBG, LLDB совсем другой. Я ожидал аналогичной обработки двоичных модулей в LLDB, но, к сожалению, это не так. Приятной особенностью LLDB является его настраиваемость. Его API можно использовать непосредственно из
Ссылка скрыта от гостей
, что делает его очень гибким в добавлении функций, которые помогают ускорить отладку и делают его приятным - как визуально, так и практически. К счастью, кто-то уже сделал скрипт для этого. Они описывают это как «клон gdbinit для LLDB». Использовать этот скрипт очень просто. Просто скачайте lldbinit.py и импортируйте его в свой .lldbinit файл, например command script import ~/lldbinit.py.Это будет выглядеть примерно так при запуске LLDB с двоичным файлом или при подключении к нему:
Если вы введете lldbinitcmdsего, он перечислит все новые команды, которые были введены в этот скрипт, что сделает отладку сносной и визуально приятной.
Одна функция, которую мне не хватает в LLDB, которая присутствует в WinDBG, - это возможность использовать имена модулей в точках останова со смещением, например, bp addresslib+1EE6где addresslib.dllнаходится загруженный модуль. Способ использования смещений в LLDB заключается в получении базового адреса модулей и последующем добавлении смещения. Это привело бы к следующему:
Это становится утомительным. Поэтому я подумал, почему бы не добавить поддержку lldbinit.py имен модулей? Идея довольно тривиальная:
1- Получить имя модуля из ввода.
2- Получить список загруженных модулей.
3- Фильтровать список с именем модуля и вернуть его базовый адрес.
Я начал с команды bpt, которая находится в функции cmd_bpt(). Ввод будет доступен в command параметре, который передается evaluate()для анализа. Первым действием, которое я сделал, было получение списка загруженных модулей:
Чтобы получить текущий контекст выполнения, его следует передать в cmd_bpt() соответствии с
Ссылка скрыта от гостей
, добавив, таким образом, exe_ctxв качестве параметра. Эта функция возвращает словарь с загруженными модулями в текущем контексте.Далее идет функция, которая фильтрует и возвращает базовый адрес модуля плюс его смещение:
Это должно быть само за себя. Он вернет окончательное выражение, которое состоит из базового адреса модуля плюс смещение (например 0x00007fff50c2a000+0x23351), возвращаемое из ввода, например audiotoolboxcore+0x23351.
Чтобы собрать вещи вместе, cmd_bpt() становится:
Также требуются декларации, такие как импорт shlexи определение по loaded_mods всему миру.
Ницца.
Вывод
Сложные инструменты, такие как LLDB, могут снизить производительность, будучи утомительными, особенно с их подробной структурой команд. При условии, что можно использовать сочетания клавиш, некоторые другие аспекты все еще утомительны. Люди, которые помогают делать такие инструменты немного менее сложными и более приятными, всегда ценятся.
Источник:
Ссылка скрыта от гостей