在Python脚本中使用LLDB命令

时间:2016-07-01 06:00:32

标签: python objective-c xcode swift lldb

我正在编写一个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函数的输入。

1 个答案:

答案 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