Несколько инструкций на шаге LLDB?

#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