我正在编写一个Python脚本,用于Xcode的LLDB。我已经启动并运行了这个简单的脚本:
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')
我想要做的是能够在Python脚本中使用LLDB的XCUIApplication()。debugDescription函数的输出。那么有没有办法:
a)在python脚本中访问XCUIApplication()。
b)将XCUIApplication()。debugDescription作为Python脚本中say_hello函数的输入。
答案 0 :(得分:1)
IIRC XCUIApplication是XCTest框架提供的一个函数,因此它是您正在调试的程序中的一个函数。所以你可以像调用任何其他函数一样调用它,在SBTarget或SBFrame上使用“EvaluateExpression”API。评估表达式的结果将在SBValue中返回给您,您可以随意打印它或其他任何内容。
注意,除非你需要支持一个非常旧的Xcode(6.x),否则使用新形式的python命令会更方便:
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