2016-07-01 5 views
0

Я пишу скрипт Python для использования в LLDB Xcode. У меня есть этот простой скрипт и работает:Использование команд LLDB в скрипте Python

import lldb 

def say_hello(debugger, command, result, dict): 
    print command 

def __lldb_init_module (debugger, dict): 
    debugger.HandleCommand('command script add -f sayhello.say_hello hello') 

То, что я хотел бы сделать, это быть в состоянии использовать выход XCUIApplication LLDB (в) функции debugDescription в сценарии Python.. Итак, есть ли способ:

a) Доступ к XCUIApplication() в скрипте python.

b) Передайте XCUIApplication(). DebugDescription как входной сигнал функции say_hello в скрипте Python.

ответ

1

IIRC XCUIApplication - это функция, предоставляемая инфраструктурой XCTest, поэтому она является функцией в программе, которую вы отлаживаете. Таким образом, вы называете это так же, как вы называете любую другую функцию, используя API «EvaluateExpression» либо на SBTarget, либо на SBFrame. Результат оценки выражения будет возвращен вам в SBValue, и вы можете распечатать это или все, что вам нужно.

Обратите внимание, если вам не нужно поддерживать очень старый Xcode (6.x) удобнее использовать новую форму команды питона:

def command_function(debugger, command, exe_ctx, result, internal_dict): 

exe_ctx является SBExecutionContext, в котором команда бежит. Если вы сделаете это так, то вы можете просто сделать:

def command_function(debugger, command, exe_ctx, result, internal_dict): 
    options = lldb.SBExpressionOptions() 
    thread = exe_ctx.GetThread() 
    if thread.IsValid(): 
     value = thread.GetFrameAtIndex(0).EvaluateExpression("XCUIApplication().debugDescription", options) 
     if value.GetError().Success(): 
      # Do whatever you want with the result of the expression 
Смежные вопросы