Извлечь состояние из неинтерактивного сеанса LLDB? - PullRequest
0 голосов
/ 13 февраля 2019

Можно ли извлечь текущее состояние программы на C / C ++, используя LLDB, без запуска интерактивного сеанса?Я видел некоторую информацию о LLDB API, но я не видел много информации о том, как его использовать, и если он может даже выполнить то, что я ищу.

В идеале, я бы написал некоторый кодв Python или что-то подобное, это внешний код, который я отлаживаю, где я использую LLDB API для получения информации о текущей программе, такой как текущие переменные и значения, и могу запускать и останавливать выполнение.Возможно ли это (или часть этого)?Есть ли какая-нибудь альтернатива?

Вот какой-то псевдокод для того, что я хотел бы сделать:

state = program.getState()
print state.values
program.next()
newState = state.set("newVariable", 10)
program.setState(newState)
program.continue()

1 Ответ

0 голосов
/ 13 февраля 2019

Отладчик Xcode реализован с использованием API lldb.XCode также предлагает командную консоль lldb, но все команды пользовательского интерфейса реализованы с использованием общедоступного API SB напрямую.

Так что, безусловно, можно делать то, что вы хотите.

ВотПример управления программой с помощью SB API:

https://github.com/llvm/llvm-project/blob/master/lldb/examples/python/process_events.py

Вот пример извлечения всех глобальных переменных и их значений:

https://github.com/llvm/llvm-project/blob/master/lldb/examples/python/globals.py

В этом каталоге есть множество других примеров, которые делают части того, что вас может заинтересовать. Если есть что-то (в пределах разумного), которое вы хотите сделать с SB API, но не можете найти способ сделать это, пожалуйста,сообщить об ошибке с помощью http://bugs.llvm.org. Предполагается, что API SB предоставляют полный интерфейс для LLDB, ортогональный интерпретатору команд.

Конечно, вы также можете использовать интерпретатор команд в неинтерактивном режиме.режим, если вы предпочитаете (через класс SBCommandInterpreter), хотя я не предлагаю этого для программирования отладчика, так как это приводит к привязке вашего кода к спецификевывод различных команд lldb, и мы не гарантируем этот вывод как API ...

...