Вызов StepOut()
, а затем EvaluateExpression()
в непосредственной последовательности, например, из скрипта, не возвращает ожидаемое значение.
Работает, когда вручную и отдельно вызывается из консоли эти функции:
(lldb) script lldb.thread.StepOut()
(lldb) script print lldb.frame.EvaluateExpression("$rax").description
Однако, это не работает при объединении их в один оператор:
(lldb) script lldb.thread.StepOut(); print lldb.frame.EvaluateExpression("$rax").description
Это выводит None
на консоль.
Проверка состояния процесса показывает, что существует разница между двумя формами:
(lldb) script lldb.thread.StepOut()
(lldb) script print lldb.process.state
Значение состояния: lldb.eStateStopped
.
При последовательном запуске состояние сразу после StepOut
отличается:
(lldb) script lldb.thread.StepOut(); print lldb.process.state
Здесь состояние lldb.eStateRunning
.
Итак, вопросы:
Как должен быть написан код, чтобы гарантировать, что StepOut
полностью завершен? Я предполагаю, что это требует, чтобы состояние вернулось к остановленному, и frame
должен быть инициализирован / настроен перед вызовом EvaluateExpression()
?