#macos #debugging #assembly #gdb #lldb
#macos #отладка #сборка #gdb #lldb
Вопрос:
В GDB можно выполнять несколько инструкций одной командой. После долгих поисков, похоже, невозможно сделать то же самое в LLDB.
Например, в GDB, если вы введете si 5
, вы перейдете на 5 инструкций. Однако выполнение того же самого в LLDB приводит к:
ошибка: индекс потока 5 находится вне диапазона (допустимые значения 0 — 1).
В GDB, выполняемом si
с целым числом, определяется, сколько инструкций нужно выполнить, но в LLDB он определяет, в каком потоке выполнить 1 инструкцию.
Есть ли какой-либо способ пошаговой передачи нескольких инструкций в LLDB, как это можно сделать в GDB?
Ответ №1:
Это улучшение, которое находится в нашей очереди, но почему-то никогда не попадает на вершину. Я добавил опцию —count в step-inst amp; step-next-inst в качестве взлома во время обеда. Это в TOT lldb, не могу сказать, когда это станет официальным релизом Apple.
Ответ №2:
Если вы застряли на более старой версии LLDB и у вас нет функции, которая была реализована после того, как был задан этот вопрос, или просто хотите автоматизировать повторение любых произвольных команд, вот быстрый и грязный способ написания сценариев нескольких команд, которые можно легко ввести из интерактивной строки LLDB python:
lldb.debugger.SetAsync(False)
for _ in range(3): lldb.debugger.HandleCommand('si')
Вышесказанное сделает API синхронным, так что каждая команда будет завершена перед запуском следующей, а затем повторит выполнение команд (3 раза в этом примере).
Чтобы получить доступ к этому приглашению, введите script
команду в приглашении LLDB, затем запустите Python.
(lldb) script